#include<iostream>
#include<vector>
#include<string>

using namespace std;

int N,M,cnt;
int to[11][11]; int P[20]; bool socket[11];

void dfs( int X){ //スイッチはNこ,depthは０からN-1まで
  if(X == N){ return;}
  socket[X] = false; dfs( X+1 );
  socket[X] = true;  dfs( X+1 );
} //N個の電球に対し、点いた/つかない、をdfsで全列挙

void count(){
  dfs(1); int count[11];
  for(int i = 1; i <= M; i++){
    for(int j = 1; j <= N; j++){
      if(to[i][j] == 1 && socket[j] == true){ count[i]++;}}
    
    bool flag = true;
    
    for(int i = 1; i <= M; i++){
      if(count[i] % 2 != P[i]){ flag = false;}}
    
    if(flag){ cnt++;}
  }
  


int main(){
   cin >> N >> M;
 
  
  for(int i = 1; i <= M; i++){
    int c; cin >> c;
    for(int j = 1; j <= c; j++){ int d;
      cin >> d; to[i][d]++;}}
 for(int i = 1; i <= M ; i++){ cin >> P[i];}
  
  count();
  

 cout << cnt << endl;
  
  return 0;
}
    
  
 