#include <bits/stdc++.h>
using namespace std;
vector<int> ad[5005];
vector<pair<int, int> > vv;
bool reachable_from_src[5005], vis[5005], done[5005];
int cnt;
void dfs(int src) {
  reachable_from_src[src] = true;
  for (int i = 0; i < ad[src].size(); i++) {
    int v = ad[src][i];
    if (!reachable_from_src[v]) {
      dfs(v);
    }
  }
}
void dfs2(int src) {
  vis[src] = true;
  if (!reachable_from_src[src]) {
    cnt++;
  }
  for (int i = 0; i < ad[src].size(); i++) {
    int v = ad[src][i];
    if (reachable_from_src[v]) {
      continue;
    }
    if (!vis[v]) {
      dfs2(v);
    }
  }
}
void dfs3(int src) {
  done[src] = true;
  for (int i = 0; i < ad[src].size(); i++) {
    int v = ad[src][i];
    if (!done[v]) {
      dfs3(v);
    }
  }
}
int main() {
  int n, m, s, i, j;
  scanf("%d %d %d", &n, &m, &s);
  for (i = 1; i <= m; i++) {
    int u, v;
    scanf("%d %d", &u, &v);
    ad[u].push_back(v);
  }
  dfs(s);
  for (i = 1; i <= n; i++) {
    if (reachable_from_src[i]) continue;
    memset(vis, false, sizeof vis);
    dfs2(i);
    vv.push_back({cnt, i});
    cnt = 0;
  }
  sort(vv.begin(), vv.end());
  reverse(vv.begin(), vv.end());
  int ans = 0;
  for (i = 0; i < vv.size(); i++) {
    if (!done[vv[i].second]) {
      dfs3(vv[i].second);
      ans++;
    }
  }
  printf("%d\n", ans);
  return 0;
}
