import java.util.*;
public class Main {
	public static void main(String[] args){
      	//データ取り込み
		Scanner sc = new Scanner(System.in);
      	int cnt = 0;
		int N = sc.nextInt();
      	int M = sc.nextInt();
      	boolean menu[][] = new boolean[N][M];
      	for(int i=0;i<N;i++){
        	for(int j=0;j<M;j++){
            	menu[i][j]= false;
            }
        }
      	for(int i=0;i<N;i++){
        	int K = sc.nextInt();
          	for(int j=0;j<K;j++){
            	int A = sc.nextInt();
              	menu[i][A-1] = true;
            }
        }
      	
      	for(int i=0;i<M;i++){
          	boolean flg = true;
        	for(int j=0;j<N;j++){
            	if(menu[j][i] ==false){
                  	flg = false;
                }
            }
          	if(flg){
            	cnt++;
            }
        }
      	
      	System.out.println(cnt);
    }
} import java.util.*; util.* java public class Main {
	public static void main(String[] args){
      	//データ取り込み
		Scanner sc = new Scanner(System.in);
      	int cnt = 0;
		int N = sc.nextInt();
      	int M = sc.nextInt();
      	boolean menu[][] = new boolean[N][M];
      	for(int i=0;i<N;i++){
        	for(int j=0;j<M;j++){
            	menu[i][j]= false;
            }
        }
      	for(int i=0;i<N;i++){
        	int K = sc.nextInt();
          	for(int j=0;j<K;j++){
            	int A = sc.nextInt();
              	menu[i][A-1] = true;
            }
        }
      	
      	for(int i=0;i<M;i++){
          	boolean flg = true;
        	for(int j=0;j<N;j++){
            	if(menu[j][i] ==false){
                  	flg = false;
                }
            }
          	if(flg){
            	cnt++;
            }
        }
      	
      	System.out.println(cnt);
    }
} Main public static void main(String[] args){
      	//データ取り込み
		Scanner sc = new Scanner(System.in);
      	int cnt = 0;
		int N = sc.nextInt();
      	int M = sc.nextInt();
      	boolean menu[][] = new boolean[N][M];
      	for(int i=0;i<N;i++){
        	for(int j=0;j<M;j++){
            	menu[i][j]= false;
            }
        }
      	for(int i=0;i<N;i++){
        	int K = sc.nextInt();
          	for(int j=0;j<K;j++){
            	int A = sc.nextInt();
              	menu[i][A-1] = true;
            }
        }
      	
      	for(int i=0;i<M;i++){
          	boolean flg = true;
        	for(int j=0;j<N;j++){
            	if(menu[j][i] ==false){
                  	flg = false;
                }
            }
          	if(flg){
            	cnt++;
            }
        }
      	
      	System.out.println(cnt);
    } main {
      	//データ取り込み
		Scanner sc = new Scanner(System.in);
      	int cnt = 0;
		int N = sc.nextInt();
      	int M = sc.nextInt();
      	boolean menu[][] = new boolean[N][M];
      	for(int i=0;i<N;i++){
        	for(int j=0;j<M;j++){
            	menu[i][j]= false;
            }
        }
      	for(int i=0;i<N;i++){
        	int K = sc.nextInt();
          	for(int j=0;j<K;j++){
            	int A = sc.nextInt();
              	menu[i][A-1] = true;
            }
        }
      	
      	for(int i=0;i<M;i++){
          	boolean flg = true;
        	for(int j=0;j<N;j++){
            	if(menu[j][i] ==false){
                  	flg = false;
                }
            }
          	if(flg){
            	cnt++;
            }
        }
      	
      	System.out.println(cnt);
    } Scanner sc = new Scanner(System.in); sc new Scanner(System.in) int cnt = 0; cnt 0 int N = sc.nextInt(); N sc.nextInt() sc.nextInt sc int M = sc.nextInt(); M sc.nextInt() sc.nextInt sc boolean menu[][] = new boolean[N][M]; menu new boolean[N][M] N M for(int i=0;i<N;i++){
        	for(int j=0;j<M;j++){
            	menu[i][j]= false;
            }
        } int i=0; int i=0; i 0 i<N i N i++ i++ i {
        	for(int j=0;j<M;j++){
            	menu[i][j]= false;
            }
        } {
        	for(int j=0;j<M;j++){
            	menu[i][j]= false;
            }
        } for(int j=0;j<M;j++){
            	menu[i][j]= false;
            } int j=0; int j=0; j 0 j<M j M j++ j++ j {
            	menu[i][j]= false;
            } {
            	menu[i][j]= false;
            } menu[i][j]= false menu[i][j] menu[i] menu i j false for(int i=0;i<N;i++){
        	int K = sc.nextInt();
          	for(int j=0;j<K;j++){
            	int A = sc.nextInt();
              	menu[i][A-1] = true;
            }
        } int i=0; int i=0; i 0 i<N i N i++ i++ i {
        	int K = sc.nextInt();
          	for(int j=0;j<K;j++){
            	int A = sc.nextInt();
              	menu[i][A-1] = true;
            }
        } {
        	int K = sc.nextInt();
          	for(int j=0;j<K;j++){
            	int A = sc.nextInt();
              	menu[i][A-1] = true;
            }
        } int K = sc.nextInt(); K sc.nextInt() sc.nextInt sc for(int j=0;j<K;j++){
            	int A = sc.nextInt();
              	menu[i][A-1] = true;
            } int j=0; int j=0; j 0 j<K j K j++ j++ j {
            	int A = sc.nextInt();
              	menu[i][A-1] = true;
            } {
            	int A = sc.nextInt();
              	menu[i][A-1] = true;
            } int A = sc.nextInt(); A sc.nextInt() sc.nextInt sc menu[i][A-1] = true menu[i][A-1] menu[i] menu i A-1 A 1 true for(int i=0;i<M;i++){
          	boolean flg = true;
        	for(int j=0;j<N;j++){
            	if(menu[j][i] ==false){
                  	flg = false;
                }
            }
          	if(flg){
            	cnt++;
            }
        } int i=0; int i=0; i 0 i<M i M i++ i++ i {
          	boolean flg = true;
        	for(int j=0;j<N;j++){
            	if(menu[j][i] ==false){
                  	flg = false;
                }
            }
          	if(flg){
            	cnt++;
            }
        } {
          	boolean flg = true;
        	for(int j=0;j<N;j++){
            	if(menu[j][i] ==false){
                  	flg = false;
                }
            }
          	if(flg){
            	cnt++;
            }
        } boolean flg = true; flg true for(int j=0;j<N;j++){
            	if(menu[j][i] ==false){
                  	flg = false;
                }
            } int j=0; int j=0; j 0 j<N j N j++ j++ j {
            	if(menu[j][i] ==false){
                  	flg = false;
                }
            } {
            	if(menu[j][i] ==false){
                  	flg = false;
                }
            } if(menu[j][i] ==false){
                  	flg = false;
                } menu[j][i] ==false menu[j][i] menu[j] menu j i false {
                  	flg = false;
                } flg = false flg false if(flg){
            	cnt++;
            } flg {
            	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 sc = new Scanner(System.in);
      	int cnt = 0;
		int N = sc.nextInt();
      	int M = sc.nextInt();
      	boolean menu[][] = new boolean[N][M];
      	for(int i=0;i<N;i++){
        	for(int j=0;j<M;j++){
            	menu[i][j]= false;
            }
        }
      	for(int i=0;i<N;i++){
        	int K = sc.nextInt();
          	for(int j=0;j<K;j++){
            	int A = sc.nextInt();
              	menu[i][A-1] = true;
            }
        }
      	
      	for(int i=0;i<M;i++){
          	boolean flg = true;
        	for(int j=0;j<N;j++){
            	if(menu[j][i] ==false){
                  	flg = false;
                }
            }
          	if(flg){
            	cnt++;
            }
        }
      	
      	System.out.println(cnt);
    }
} public class Main {
	public static void main(String[] args){
      	//データ取り込み
		Scanner sc = new Scanner(System.in);
      	int cnt = 0;
		int N = sc.nextInt();
      	int M = sc.nextInt();
      	boolean menu[][] = new boolean[N][M];
      	for(int i=0;i<N;i++){
        	for(int j=0;j<M;j++){
            	menu[i][j]= false;
            }
        }
      	for(int i=0;i<N;i++){
        	int K = sc.nextInt();
          	for(int j=0;j<K;j++){
            	int A = sc.nextInt();
              	menu[i][A-1] = true;
            }
        }
      	
      	for(int i=0;i<M;i++){
          	boolean flg = true;
        	for(int j=0;j<N;j++){
            	if(menu[j][i] ==false){
                  	flg = false;
                }
            }
          	if(flg){
            	cnt++;
            }
        }
      	
      	System.out.println(cnt);
    }
} Main
import java.util.*;
public class Main {
	public static void main(String[] args){
      	//データ取り込み
		Scanner sc = new Scanner(System.in);
      	int cnt = 0;
		int N = sc.nextInt();
      	int M = sc.nextInt();
      	boolean menu[][] = new boolean[N][M];
      	for(int i=0;i<N;i++){
        	for(int j=0;j<M;j++){
            	menu[i][j]= false;
            }
        }
      	for(int i=0;i<N;i++){
        	int K = sc.nextInt();
          	for(int j=0;j<K;j++){
            	int A = sc.nextInt();
              	menu[i][A-1] = true;
            }
        }
      	
      	for(int i=0;i<M;i++){
          	boolean flg = true;
        	for(int j=0;j<N;j++){
            	if(menu[j][i] ==false){
                  	flg = false;
                }
            }
          	if(flg){
            	cnt++;
            }
        }
      	
      	System.out.println(cnt);
    }
}