#include<bits/stdc++.h>
using namespace std;

bool check(string s, vector<vector<int> > v, vector<int> p){
  bool flg = true;
  
  for(int i = 0; i < p.size(); i++){
    int sum = 0;
    for( j : v.at(i)){
      sum += s[9-j] - '0';
    }
    cerr << sum << endl;
    if(sum%2 != p[i]){ 
      flg = false;
      break;
    }
  }
  
  return flg;
}

int main(){
  int N, M;
  cin >> N >> M;
  
  vector<vector<int> > v(M);
  for(int i = 0; i < M; i++){
    int num;
    cin >> num;
    for(int j = 0; j < num; j++){
      int tmp;
      cin >> tmp;
      v.at(j).push_back(tmp);
    }
  }
  vector<int> p(M);
  for(int i = 0; i < M; i++){
    cin >> p.at(i);
  }
  
  int cnt = 0;
  for(int i = 0; i < (1<<N); i++){
    stringstream ss;
    ss << bitset<10>(i);
    if(check(ss.str(), v, p)){
      cnt++;
    }
  }
  cout << cnt << endl;
       
}