import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.StringTokenizer;

public class Main {
	static PrintWriter out;

	static HashMap<Integer, Integer> happyC;
	public static void main(String[] args) throws Exception {
		Scanner sc = new Scanner(System.in);
		out = new PrintWriter(System.out);
		
		int n = sc.nextInt();
		int m = sc.nextInt();
		int[] c = new int[m+1];
		for (int i = 0; i < n; i++) {
			int j = sc.nextInt();
			for (int j2 = 0; j2 < j; j2++) {
				c[sc.nextInt()]++;
			}
		}
		int ans = 0;
		for (int i = 0; i < m+1; i++) {
			if(c[i] == n )
				ans++;
		}
		out.println(ans);
		out.flush();	
	}
	
}
	
class Scanner {
	StringTokenizer st;
	BufferedReader br;

	public Scanner(InputStream system) {
		br = new BufferedReader(new InputStreamReader(system));
	}

	public String next() throws IOException {
		while (st == null || !st.hasMoreTokens())
			st = new StringTokenizer(br.readLine());
		return st.nextToken();
	}

	public String nextLine() throws IOException {
		return br.readLine();
	}

	public int nextInt() throws IOException {
		return Integer.parseInt(next());
	}

	public double nextDouble() throws IOException {
		return Double.parseDouble(next());
	}

	public char nextChar() throws IOException {
		return next().charAt(0);
	}

	public Long nextLong() throws IOException {
		return Long.parseLong(next());
	}

	public boolean ready() throws IOException {
		return br.ready();
	}

	public void waitForInput() throws InterruptedException {
		Thread.sleep(3000);
	}

} import java.io.BufferedReader; BufferedReader java.io import java.io.IOException; IOException java.io import java.io.InputStream; InputStream java.io import java.io.InputStreamReader; InputStreamReader java.io import java.io.PrintWriter; PrintWriter java.io import java.util.HashMap; HashMap java.util import java.util.StringTokenizer; StringTokenizer java.util public class Main {
	static PrintWriter out;

	static HashMap<Integer, Integer> happyC;
	public static void main(String[] args) throws Exception {
		Scanner sc = new Scanner(System.in);
		out = new PrintWriter(System.out);
		
		int n = sc.nextInt();
		int m = sc.nextInt();
		int[] c = new int[m+1];
		for (int i = 0; i < n; i++) {
			int j = sc.nextInt();
			for (int j2 = 0; j2 < j; j2++) {
				c[sc.nextInt()]++;
			}
		}
		int ans = 0;
		for (int i = 0; i < m+1; i++) {
			if(c[i] == n )
				ans++;
		}
		out.println(ans);
		out.flush();	
	}
	
} Main static PrintWriter out; out static HashMap<Integer, Integer> happyC; happyC public static void main(String[] args) throws Exception {
		Scanner sc = new Scanner(System.in);
		out = new PrintWriter(System.out);
		
		int n = sc.nextInt();
		int m = sc.nextInt();
		int[] c = new int[m+1];
		for (int i = 0; i < n; i++) {
			int j = sc.nextInt();
			for (int j2 = 0; j2 < j; j2++) {
				c[sc.nextInt()]++;
			}
		}
		int ans = 0;
		for (int i = 0; i < m+1; i++) {
			if(c[i] == n )
				ans++;
		}
		out.println(ans);
		out.flush();	
	} main {
		Scanner sc = new Scanner(System.in);
		out = new PrintWriter(System.out);
		
		int n = sc.nextInt();
		int m = sc.nextInt();
		int[] c = new int[m+1];
		for (int i = 0; i < n; i++) {
			int j = sc.nextInt();
			for (int j2 = 0; j2 < j; j2++) {
				c[sc.nextInt()]++;
			}
		}
		int ans = 0;
		for (int i = 0; i < m+1; i++) {
			if(c[i] == n )
				ans++;
		}
		out.println(ans);
		out.flush();	
	} Scanner sc = new Scanner(System.in); sc new Scanner(System.in) out = new PrintWriter(System.out) out new PrintWriter(System.out) int n = sc.nextInt(); n sc.nextInt() sc.nextInt sc int m = sc.nextInt(); m sc.nextInt() sc.nextInt sc int[] c = new int[m+1]; c new int[m+1] m+1 m 1 for (int i = 0; i < n; i++) {
			int j = sc.nextInt();
			for (int j2 = 0; j2 < j; j2++) {
				c[sc.nextInt()]++;
			}
		} int i = 0; int i = 0; i 0 i < n i n i++ i++ i {
			int j = sc.nextInt();
			for (int j2 = 0; j2 < j; j2++) {
				c[sc.nextInt()]++;
			}
		} {
			int j = sc.nextInt();
			for (int j2 = 0; j2 < j; j2++) {
				c[sc.nextInt()]++;
			}
		} int j = sc.nextInt(); j sc.nextInt() sc.nextInt sc for (int j2 = 0; j2 < j; j2++) {
				c[sc.nextInt()]++;
			} int j2 = 0; int j2 = 0; j2 0 j2 < j j2 j j2++ j2++ j2 {
				c[sc.nextInt()]++;
			} {
				c[sc.nextInt()]++;
			} c[sc.nextInt()]++ c[sc.nextInt()] c sc.nextInt() sc.nextInt sc int ans = 0; ans 0 for (int i = 0; i < m+1; i++) {
			if(c[i] == n )
				ans++;
		} int i = 0; int i = 0; i 0 i < m+1 i m+1 m 1 i++ i++ i {
			if(c[i] == n )
				ans++;
		} {
			if(c[i] == n )
				ans++;
		} if(c[i] == n )
				ans++; c[i] == n c[i] c i n ans++ ans out.println(ans) out.println out ans out.flush() out.flush out String[] args args class Scanner {
	StringTokenizer st;
	BufferedReader br;

	public Scanner(InputStream system) {
		br = new BufferedReader(new InputStreamReader(system));
	}

	public String next() throws IOException {
		while (st == null || !st.hasMoreTokens())
			st = new StringTokenizer(br.readLine());
		return st.nextToken();
	}

	public String nextLine() throws IOException {
		return br.readLine();
	}

	public int nextInt() throws IOException {
		return Integer.parseInt(next());
	}

	public double nextDouble() throws IOException {
		return Double.parseDouble(next());
	}

	public char nextChar() throws IOException {
		return next().charAt(0);
	}

	public Long nextLong() throws IOException {
		return Long.parseLong(next());
	}

	public boolean ready() throws IOException {
		return br.ready();
	}

	public void waitForInput() throws InterruptedException {
		Thread.sleep(3000);
	}

} Scanner StringTokenizer st; st BufferedReader br; br public Scanner(InputStream system) {
		br = new BufferedReader(new InputStreamReader(system));
	} Scanner {
		br = new BufferedReader(new InputStreamReader(system));
	} br = new BufferedReader(new InputStreamReader(system)) br new BufferedReader(new InputStreamReader(system)) InputStream system system public String next() throws IOException {
		while (st == null || !st.hasMoreTokens())
			st = new StringTokenizer(br.readLine());
		return st.nextToken();
	} next {
		while (st == null || !st.hasMoreTokens())
			st = new StringTokenizer(br.readLine());
		return st.nextToken();
	} while (st == null || !st.hasMoreTokens())
			st = new StringTokenizer(br.readLine()); st == null || !st.hasMoreTokens() st == null st null !st.hasMoreTokens() st.hasMoreTokens() st.hasMoreTokens st st = new StringTokenizer(br.readLine()) st new StringTokenizer(br.readLine()) return st.nextToken(); st.nextToken() st.nextToken st public String nextLine() throws IOException {
		return br.readLine();
	} nextLine {
		return br.readLine();
	} return br.readLine(); br.readLine() br.readLine br public int nextInt() throws IOException {
		return Integer.parseInt(next());
	} nextInt {
		return Integer.parseInt(next());
	} return Integer.parseInt(next()); Integer.parseInt(next()) Integer.parseInt Integer next() next public double nextDouble() throws IOException {
		return Double.parseDouble(next());
	} nextDouble {
		return Double.parseDouble(next());
	} return Double.parseDouble(next()); Double.parseDouble(next()) Double.parseDouble Double next() next public char nextChar() throws IOException {
		return next().charAt(0);
	} nextChar {
		return next().charAt(0);
	} return next().charAt(0); next().charAt(0) next().charAt next() next 0 public Long nextLong() throws IOException {
		return Long.parseLong(next());
	} nextLong {
		return Long.parseLong(next());
	} return Long.parseLong(next()); Long.parseLong(next()) Long.parseLong Long next() next public boolean ready() throws IOException {
		return br.ready();
	} ready {
		return br.ready();
	} return br.ready(); br.ready() br.ready br public void waitForInput() throws InterruptedException {
		Thread.sleep(3000);
	} waitForInput {
		Thread.sleep(3000);
	} Thread.sleep(3000) Thread.sleep Thread 3000 public class Main {
	static PrintWriter out;

	static HashMap<Integer, Integer> happyC;
	public static void main(String[] args) throws Exception {
		Scanner sc = new Scanner(System.in);
		out = new PrintWriter(System.out);
		
		int n = sc.nextInt();
		int m = sc.nextInt();
		int[] c = new int[m+1];
		for (int i = 0; i < n; i++) {
			int j = sc.nextInt();
			for (int j2 = 0; j2 < j; j2++) {
				c[sc.nextInt()]++;
			}
		}
		int ans = 0;
		for (int i = 0; i < m+1; i++) {
			if(c[i] == n )
				ans++;
		}
		out.println(ans);
		out.flush();	
	}
	
} public class Main {
	static PrintWriter out;

	static HashMap<Integer, Integer> happyC;
	public static void main(String[] args) throws Exception {
		Scanner sc = new Scanner(System.in);
		out = new PrintWriter(System.out);
		
		int n = sc.nextInt();
		int m = sc.nextInt();
		int[] c = new int[m+1];
		for (int i = 0; i < n; i++) {
			int j = sc.nextInt();
			for (int j2 = 0; j2 < j; j2++) {
				c[sc.nextInt()]++;
			}
		}
		int ans = 0;
		for (int i = 0; i < m+1; i++) {
			if(c[i] == n )
				ans++;
		}
		out.println(ans);
		out.flush();	
	}
	
} Main
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.StringTokenizer;

public class Main {
	static PrintWriter out;

	static HashMap<Integer, Integer> happyC;
	public static void main(String[] args) throws Exception {
		Scanner sc = new Scanner(System.in);
		out = new PrintWriter(System.out);
		
		int n = sc.nextInt();
		int m = sc.nextInt();
		int[] c = new int[m+1];
		for (int i = 0; i < n; i++) {
			int j = sc.nextInt();
			for (int j2 = 0; j2 < j; j2++) {
				c[sc.nextInt()]++;
			}
		}
		int ans = 0;
		for (int i = 0; i < m+1; i++) {
			if(c[i] == n )
				ans++;
		}
		out.println(ans);
		out.flush();	
	}
	
}
	
class Scanner {
	StringTokenizer st;
	BufferedReader br;

	public Scanner(InputStream system) {
		br = new BufferedReader(new InputStreamReader(system));
	}

	public String next() throws IOException {
		while (st == null || !st.hasMoreTokens())
			st = new StringTokenizer(br.readLine());
		return st.nextToken();
	}

	public String nextLine() throws IOException {
		return br.readLine();
	}

	public int nextInt() throws IOException {
		return Integer.parseInt(next());
	}

	public double nextDouble() throws IOException {
		return Double.parseDouble(next());
	}

	public char nextChar() throws IOException {
		return next().charAt(0);
	}

	public Long nextLong() throws IOException {
		return Long.parseLong(next());
	}

	public boolean ready() throws IOException {
		return br.ready();
	}

	public void waitForInput() throws InterruptedException {
		Thread.sleep(3000);
	}

}
