#include <bits/stdc++.h>
using namespace std;
const int N = 200010;
int h[N],e[N],ne[N],idx;
int h1[N],e1[N],n1[N],id;
void add1(int a,int b)
{
e1[id]=b,n1[id]=h1[a],h1[a]=id++;
}
int n,m,s;
int times=1;
int color[N];
int dfn[N],low[N];
bool vis[N];
int cc=0;
void add(int a,int b)
{
e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}
int flag[5010][5010];
stack<int> stk;
void dfs(int u,int f)
{
vis[u]=1;
dfn[u]=times,low[u]=times++;
stk.push(u);
for(int i=h[u];i!=-1;i=ne[i])
{
if(!dfn[e[i]])
{
dfs(e[i],u);
low[u]=min(low[u],low[e[i]]);
}
else if(vis[e[i]])low[u]=min(low[u],dfn[e[i]]);
}
if(low[u]==dfn[u])
{
int x;
cc++;
do
{
x=stk.top();stk.pop();
color[x]=cc;
vis[x]=0;
}while(x!=u);
}
}
int x[5010],y[5010];
int rd[5010];
bool ff[5010];
void ds(int u)
{
ff[u]=1;
for(int i=h1[u];i!=-1;i=n1[i])
{
if(!ff[e[i]]) ds(e[i]);
}
}
int main()
{
scanf("%d%d%d",&n,&m,&s);
memset(h,-1,sizeof h);
for(int i=1;i<=m;i++)
{
int a,b;
scanf("%d%d",&a,&b);
add(a,b);
x[i]=a,y[i]=b;
}
for(int i=1;i<=n;i++)
{
if(!color[i]) dfs(i,0);
}
memset(h1,-1,sizeof h1);
for(int i=1;i<=m;i++)
{
int a=color[x[i]],b=color[y[i]];
if(!flag[a][b])
{
flag[a][b]=1;
rd[b]++;
add1(a,b);
}
}
ds(s);
int ans=0;
for(int i=1;i<=cc;i++)
{
if(!ff[i] && !rd[i]) ans++;
}
cout<<ans;
}