const MAXV = 10000;
type p_node = ^node;

node = record
    vx: longint;
    next: p_node;
    end;
    
var list: array[1..MAXV] of p_node;
d, f: array[1..MAXV] of longint;
n, m, s: longint;

procedure add(u, v: longint);
    var p, q: p_node;
    begin
        p := list[u]; q := p;
        while (p <> nil) do
            begin
                if (p^.vx = v) then exit;
                q := p;
                p := p^.next;
            end;
        new(p); p^.vx := v;
        if (list[u] = nil) then list[u] := p
        else q^.next := p;
    end;
    
procedure enter;
    var fi: text;
    i, u, v: longint;
    begin
        assign(fi, ''); reset(fi);
        readln(fi, n, m, s);
        for i := 1 to m do
            begin
                readln(fi, u, v);
                add(u, v);
            end;
        close(fi);
    end;
    
procedure init;
    begin
        filldword(d, sizeof(d) div sizeof(d[1]), 0);
        d[s] := 1; f[s] := 1;
    end;
    
procedure BFS;
    type p_no = ^no;
    no = record
        vx: longint;
        next: p_no;
        end;
    var front, rear: p_no;
    u, v: longint;
    p1: p_node;
    procedure push(vx: longint);
        var p: p_no;
        begin
            new(p); p^.vx := vx;
            if (front = nil) then front := p
            else rear^.next := p;
            rear := p;
        end;
    function pop: longint;
        var p: p_no;
        begin
            pop := front^.vx;
            p := front;
            front := front^.next;
            dispose(p);
        end;
    begin
        front := nil;
        push(s);
        repeat
            u := pop;
            p1 := list[u];
            while (p1 <> nil) do
                begin
                    v := p1^.vx;
                    if (d[v] = 0) then
                        begin
                            d[v] := d[u] + 1;
                            f[v] := f[u];
                            push(v);
                        end
                    else if (f[v] < 2) and (d[v] - 1 = d[u]) then inc(f[v], f[u]);
                    p1 := p1^.next;
                end;
        until front = nil;
    end;
    
function count: longint;
    var i: longint;
    begin
        count := 0;
        for i := 1 to n do 
            if (f[i] > 1) then inc(count);
    end;
    
BEGIN
    enter;
    init;
    BFS;
    writeln(count);    
END.