include<vector>
#include<string>

using namespace std;

int N,M,cnt = 0;
int to[15][15]; int P[15]; bool switch1[15];

void count(){
    int count[15];
  
  for(int i = 1; i <= M ; i++){
    count[i] = 0;} //countを初期化
  //ある注目した電球(1からM)を灯すスイッチ全体のうち、onになっているものの個数をcountで表す
  for(int i = 1; i <= M; i++){
    for(int j = 1; j <= N; j++){
      if(to[i][j] > 0 && switch1[j] == true){ count[i]++;}}}
  //i番目の電球とj番目のスイッチがつながっていて、かつj番目のスイッチがonならば、インクリメント
    
    bool flag = true;//flag初期化
    
    for(int i = 1; i <= M; i++){
      if(count[i] % 2 != P[i]){ flag = false;}}//M個の電球に対し、点灯するかを調べる
    
    if(flag){ cnt++;} //flagが破られなければ、答えをインクリメント
  }

void dfs( int X){ //スイッチはNこ,深さXは１からNまで
  if(X == N + 1){ count(); return;}
  switch1[X] = false; dfs( X+1 );
  switch1[X] = true;  dfs( X+1 );
} //N個のスイッチに対し、on/off、をdfsで全列挙


  


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]++;}}//toは隣接行列
 for(int i = 1; i <= M ; i++){ cin >> P[i];}
  
  dfs(1);
  

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