There are n cities and m roads in Berland. Each road connects a pair of cities. The roads in Berland are one-way.

What is the minimum number of new roads that need to be built to make all the cities reachable from the capital?

New roads will also be one-way.

Input

The first line of input consists of three integers n, m and s (1 ≤ n ≤ 5000, 0 ≤ m ≤ 5000, 1 ≤ s ≤ n) — the number of cities, the number of roads and the index of the capital. Cities are indexed from 1 to n.

The following m lines contain roads: road i is given as a pair of cities u_i, v_i (1 ≤ u_i, v_i ≤ n, u_i ≠ v_i). For each pair of cities (u, v), there can be at most one road from u to v. Roads in opposite directions between a pair of cities are allowed (i.e. from u to v and from v to u).

Output

Print one integer — the minimum number of extra roads needed to make all the cities reachable from city s. If all the cities are already reachable from s, print 0.

Examples

Input

9 9 1
1 2
1 3
2 3
1 5
5 6
6 1
1 8
9 8
7 1


Output

3


Input

5 4 5
1 2
2 3
3 4
4 1


Output

1

Note

The first example is illustrated by the following:

<image>

For example, you can add roads (6, 4), (7, 9), (1, 7) to make all the cities reachable from s = 1.

The second example is illustrated by the following:

<image>

In this example, you can add any one of the roads (5, 1), (5, 2), (5, 3), (5, 4) to make all the cities reachable from s = 5.
/*
If you want to aim high, aim high
Don't let that studying and grades consume you
Just live life young
******************************
What do you think? What do you think?
1st on Billboard, what do you think of it
Next is a Grammy, what do you think of it
However you think, I’m sorry, but shit, I have no fucking interest
*******************************
Higher, higher, even higher, to the point you won’t even be able to see me
https://www.a2oj.com/Ladder16.html
*******************************
NEVER DO 300IQ CONTESTS EVER
300IQ AS WRITER = EXTRA NONO
*/
import java.util.*;
import java.io.*;
import java.math.*;

   public class E
   {
      public static void main(String omkar[]) throws Exception
      {
         BufferedReader infile = new BufferedReader(new InputStreamReader(System.in));  
         StringTokenizer st = new StringTokenizer(infile.readLine());
         int N = Integer.parseInt(st.nextToken());
         int M = Integer.parseInt(st.nextToken());
         int C = Integer.parseInt(st.nextToken());
         ArrayList<Integer>[] edges = new ArrayList[N+1];
         for(int i=1; i <= N; i++)
            edges[i] = new ArrayList<Integer>();
         for(int i=0; i < M; i++)
         {
            st = new StringTokenizer(infile.readLine());
            int a = Integer.parseInt(st.nextToken());
            int b = Integer.parseInt(st.nextToken());
            edges[a].add(b);
         }
         //from capital
         boolean[] seen = new boolean[N+1];
         dfs(C, seen, edges);
         int res = 0;
         ArrayList<Thing> ls = new ArrayList<Thing>();
         for(int i=1; i <= N; i++)
            if(!seen[i])
            {
               boolean[] temp = new boolean[N+1];
               dfs(i, temp, edges);
               int val = 0;
               for(boolean b: temp)
                  if(b)
                     val++;
               ls.add(new Thing(i, val));
            }
         Collections.sort(ls);
         for(Thing t: ls)
            if(!seen[t.city])
            {
               dfs(t.city, seen, edges);
               res++;
            }
         System.out.println(res);
      }
      public static void dfs(int curr, boolean[] seen, ArrayList<Integer>[] edges)
      {
         seen[curr] = true;
         for(int next: edges[curr])
            if(!seen[next])
               dfs(next, seen, edges);
      }
   }
   class Thing implements Comparable<Thing>
   {
      public int city;
      public int val;
      
      public Thing(int a, int b)
      {
         city = a;
         val = b;
      }
      public int compareTo(Thing oth)
      {
         return oth.val-val;
      }
   }