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

void switches(int n,int swi,vector<bool> &onoff){
  // スイッチの情報(swiをnビットで表す)をonoffに入れる
  for (int i=0; i<n; i++){
    onoff.at(i) = swi % 2;
    swi /= 2;
  }
  return;
}

bool lights(int n,vector<vector<int>> &s,vector<int> &p,vector<bool> &onoff){
  bool ok = true;
  for (int i=0; i<n; i++){
    int cnt = 0;
    for (int j=0; j<s.at(i).size(); j++){
      if (onoff(s.at(i).at(j)-1)==true) cnt++;
    }
    if (cnt%2 != p.at(i)) ok = false;
  }
  return ok;
}

int solve(int n,int m,vector<vector<int>> &s,vector<int> &p){
  /* スイッチが8個あるとして00000000~11111111は0~2^8-1で表せる
   2で割ったあまり、2で割って2で割ったあまり、…が0ならoff、1なら
   onに対応させる。
  */
  int ans = 0, counts = 1;
  for (int i=0; i<n; i++){
    counts *= 2;
  }
  vector<bool> onoff(n); // n子のスイッチのonoff情報がbool
  for (int i=0; i<counts; i++){
    switches(n,i,onoff);
    if (lights(n,s,p,onoff)) ans++;
  }
  
  return ans;
}

int main() {
  int n,m; cin >>n >>m;
  vector<vector<int>> s(m);
  int k;
  for (int i=0; i<m; i++){
    int buf;
    cin >>k;
    for (int j=0; j<k; j++){
      cin >>buf;
      s.at(j).push_back(buf);
    }
  }
  vector<int> p(m);
  for (int i=0; i<m; i++) cin >>p.at(i);
  int ans = solve(n,m,s,p);
  
  cout <<ans <<endl;
}
