import java.util.Arrays;
import java.util.Scanner;
public class Main {

	public static void main(String[] args) {
		Scanner stdIn = new Scanner(System.in);
		
		int n = stdIn.nextInt();
		int m = stdIn.nextInt();
		
		boolean[] flag = new boolean[m];
		Arrays.fill(flag,true);
		
		for(int i = 0; i < n ; i++) {
			int k = stdIn.nextInt();
			int[]check = new int[k];
			for(int j = 0; j < k; j++) {
				check[j] = stdIn.nextInt();
				
				
				
			}
			
			
			for(int j = 0; j < m; j++) {
				boolean flag2 = false;
				for(int p = 0; p < k; p++) {
					if((j+1)==check[p]) {
						flag2 = true;
					}
				}
				if(!flag2) {
					flag[j] = false;
				}
				
				
				
			}
			
			
		}
		
		long cnt = 0;
		for(int i = 0; i < m; i++) {
			if(flag[i] == true) {
				cnt++;
			}
		}
		System.out.println(cnt);
		
	}

} import java.util.Arrays; Arrays java.util import java.util.Scanner; Scanner java.util public class Main {

	public static void main(String[] args) {
		Scanner stdIn = new Scanner(System.in);
		
		int n = stdIn.nextInt();
		int m = stdIn.nextInt();
		
		boolean[] flag = new boolean[m];
		Arrays.fill(flag,true);
		
		for(int i = 0; i < n ; i++) {
			int k = stdIn.nextInt();
			int[]check = new int[k];
			for(int j = 0; j < k; j++) {
				check[j] = stdIn.nextInt();
				
				
				
			}
			
			
			for(int j = 0; j < m; j++) {
				boolean flag2 = false;
				for(int p = 0; p < k; p++) {
					if((j+1)==check[p]) {
						flag2 = true;
					}
				}
				if(!flag2) {
					flag[j] = false;
				}
				
				
				
			}
			
			
		}
		
		long cnt = 0;
		for(int i = 0; i < m; i++) {
			if(flag[i] == true) {
				cnt++;
			}
		}
		System.out.println(cnt);
		
	}

} Main public static void main(String[] args) {
		Scanner stdIn = new Scanner(System.in);
		
		int n = stdIn.nextInt();
		int m = stdIn.nextInt();
		
		boolean[] flag = new boolean[m];
		Arrays.fill(flag,true);
		
		for(int i = 0; i < n ; i++) {
			int k = stdIn.nextInt();
			int[]check = new int[k];
			for(int j = 0; j < k; j++) {
				check[j] = stdIn.nextInt();
				
				
				
			}
			
			
			for(int j = 0; j < m; j++) {
				boolean flag2 = false;
				for(int p = 0; p < k; p++) {
					if((j+1)==check[p]) {
						flag2 = true;
					}
				}
				if(!flag2) {
					flag[j] = false;
				}
				
				
				
			}
			
			
		}
		
		long cnt = 0;
		for(int i = 0; i < m; i++) {
			if(flag[i] == true) {
				cnt++;
			}
		}
		System.out.println(cnt);
		
	} main {
		Scanner stdIn = new Scanner(System.in);
		
		int n = stdIn.nextInt();
		int m = stdIn.nextInt();
		
		boolean[] flag = new boolean[m];
		Arrays.fill(flag,true);
		
		for(int i = 0; i < n ; i++) {
			int k = stdIn.nextInt();
			int[]check = new int[k];
			for(int j = 0; j < k; j++) {
				check[j] = stdIn.nextInt();
				
				
				
			}
			
			
			for(int j = 0; j < m; j++) {
				boolean flag2 = false;
				for(int p = 0; p < k; p++) {
					if((j+1)==check[p]) {
						flag2 = true;
					}
				}
				if(!flag2) {
					flag[j] = false;
				}
				
				
				
			}
			
			
		}
		
		long cnt = 0;
		for(int i = 0; i < m; i++) {
			if(flag[i] == true) {
				cnt++;
			}
		}
		System.out.println(cnt);
		
	} Scanner stdIn = new Scanner(System.in); stdIn new Scanner(System.in) int n = stdIn.nextInt(); n stdIn.nextInt() stdIn.nextInt stdIn int m = stdIn.nextInt(); m stdIn.nextInt() stdIn.nextInt stdIn boolean[] flag = new boolean[m]; flag new boolean[m] m Arrays.fill(flag,true) Arrays.fill Arrays flag true for(int i = 0; i < n ; i++) {
			int k = stdIn.nextInt();
			int[]check = new int[k];
			for(int j = 0; j < k; j++) {
				check[j] = stdIn.nextInt();
				
				
				
			}
			
			
			for(int j = 0; j < m; j++) {
				boolean flag2 = false;
				for(int p = 0; p < k; p++) {
					if((j+1)==check[p]) {
						flag2 = true;
					}
				}
				if(!flag2) {
					flag[j] = false;
				}
				
				
				
			}
			
			
		} int i = 0; int i = 0; i 0 i < n i n i++ i++ i {
			int k = stdIn.nextInt();
			int[]check = new int[k];
			for(int j = 0; j < k; j++) {
				check[j] = stdIn.nextInt();
				
				
				
			}
			
			
			for(int j = 0; j < m; j++) {
				boolean flag2 = false;
				for(int p = 0; p < k; p++) {
					if((j+1)==check[p]) {
						flag2 = true;
					}
				}
				if(!flag2) {
					flag[j] = false;
				}
				
				
				
			}
			
			
		} {
			int k = stdIn.nextInt();
			int[]check = new int[k];
			for(int j = 0; j < k; j++) {
				check[j] = stdIn.nextInt();
				
				
				
			}
			
			
			for(int j = 0; j < m; j++) {
				boolean flag2 = false;
				for(int p = 0; p < k; p++) {
					if((j+1)==check[p]) {
						flag2 = true;
					}
				}
				if(!flag2) {
					flag[j] = false;
				}
				
				
				
			}
			
			
		} int k = stdIn.nextInt(); k stdIn.nextInt() stdIn.nextInt stdIn int[]check = new int[k]; check new int[k] k for(int j = 0; j < k; j++) {
				check[j] = stdIn.nextInt();
				
				
				
			} int j = 0; int j = 0; j 0 j < k j k j++ j++ j {
				check[j] = stdIn.nextInt();
				
				
				
			} {
				check[j] = stdIn.nextInt();
				
				
				
			} check[j] = stdIn.nextInt() check[j] check j stdIn.nextInt() stdIn.nextInt stdIn for(int j = 0; j < m; j++) {
				boolean flag2 = false;
				for(int p = 0; p < k; p++) {
					if((j+1)==check[p]) {
						flag2 = true;
					}
				}
				if(!flag2) {
					flag[j] = false;
				}
				
				
				
			} int j = 0; int j = 0; j 0 j < m j m j++ j++ j {
				boolean flag2 = false;
				for(int p = 0; p < k; p++) {
					if((j+1)==check[p]) {
						flag2 = true;
					}
				}
				if(!flag2) {
					flag[j] = false;
				}
				
				
				
			} {
				boolean flag2 = false;
				for(int p = 0; p < k; p++) {
					if((j+1)==check[p]) {
						flag2 = true;
					}
				}
				if(!flag2) {
					flag[j] = false;
				}
				
				
				
			} boolean flag2 = false; flag2 false for(int p = 0; p < k; p++) {
					if((j+1)==check[p]) {
						flag2 = true;
					}
				} int p = 0; int p = 0; p 0 p < k p k p++ p++ p {
					if((j+1)==check[p]) {
						flag2 = true;
					}
				} {
					if((j+1)==check[p]) {
						flag2 = true;
					}
				} if((j+1)==check[p]) {
						flag2 = true;
					} (j+1)==check[p] (j+1) j 1 check[p] check p {
						flag2 = true;
					} flag2 = true flag2 true if(!flag2) {
					flag[j] = false;
				} !flag2 flag2 {
					flag[j] = false;
				} flag[j] = false flag[j] flag j false long cnt = 0; cnt 0 for(int i = 0; i < m; i++) {
			if(flag[i] == true) {
				cnt++;
			}
		} int i = 0; int i = 0; i 0 i < m i m i++ i++ i {
			if(flag[i] == true) {
				cnt++;
			}
		} {
			if(flag[i] == true) {
				cnt++;
			}
		} if(flag[i] == true) {
				cnt++;
			} flag[i] == true flag[i] flag i true {
				cnt++;
			} cnt++ cnt System.out.println(cnt) System.out.println System.out System System.out cnt String[] args args public class Main {

	public static void main(String[] args) {
		Scanner stdIn = new Scanner(System.in);
		
		int n = stdIn.nextInt();
		int m = stdIn.nextInt();
		
		boolean[] flag = new boolean[m];
		Arrays.fill(flag,true);
		
		for(int i = 0; i < n ; i++) {
			int k = stdIn.nextInt();
			int[]check = new int[k];
			for(int j = 0; j < k; j++) {
				check[j] = stdIn.nextInt();
				
				
				
			}
			
			
			for(int j = 0; j < m; j++) {
				boolean flag2 = false;
				for(int p = 0; p < k; p++) {
					if((j+1)==check[p]) {
						flag2 = true;
					}
				}
				if(!flag2) {
					flag[j] = false;
				}
				
				
				
			}
			
			
		}
		
		long cnt = 0;
		for(int i = 0; i < m; i++) {
			if(flag[i] == true) {
				cnt++;
			}
		}
		System.out.println(cnt);
		
	}

} public class Main {

	public static void main(String[] args) {
		Scanner stdIn = new Scanner(System.in);
		
		int n = stdIn.nextInt();
		int m = stdIn.nextInt();
		
		boolean[] flag = new boolean[m];
		Arrays.fill(flag,true);
		
		for(int i = 0; i < n ; i++) {
			int k = stdIn.nextInt();
			int[]check = new int[k];
			for(int j = 0; j < k; j++) {
				check[j] = stdIn.nextInt();
				
				
				
			}
			
			
			for(int j = 0; j < m; j++) {
				boolean flag2 = false;
				for(int p = 0; p < k; p++) {
					if((j+1)==check[p]) {
						flag2 = true;
					}
				}
				if(!flag2) {
					flag[j] = false;
				}
				
				
				
			}
			
			
		}
		
		long cnt = 0;
		for(int i = 0; i < m; i++) {
			if(flag[i] == true) {
				cnt++;
			}
		}
		System.out.println(cnt);
		
	}

} Main
import java.util.Arrays;
import java.util.Scanner;
public class Main {

	public static void main(String[] args) {
		Scanner stdIn = new Scanner(System.in);
		
		int n = stdIn.nextInt();
		int m = stdIn.nextInt();
		
		boolean[] flag = new boolean[m];
		Arrays.fill(flag,true);
		
		for(int i = 0; i < n ; i++) {
			int k = stdIn.nextInt();
			int[]check = new int[k];
			for(int j = 0; j < k; j++) {
				check[j] = stdIn.nextInt();
				
				
				
			}
			
			
			for(int j = 0; j < m; j++) {
				boolean flag2 = false;
				for(int p = 0; p < k; p++) {
					if((j+1)==check[p]) {
						flag2 = true;
					}
				}
				if(!flag2) {
					flag[j] = false;
				}
				
				
				
			}
			
			
		}
		
		long cnt = 0;
		for(int i = 0; i < m; i++) {
			if(flag[i] == true) {
				cnt++;
			}
		}
		System.out.println(cnt);
		
	}

}
