#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1000000007;
const long long INF = 9999999999999999;
using ll = long long;
int binary(int bina) {
  int ans = 0;
  for (int i = 0; bina > 0; i++) {
    ans = ans + (bina % 2) * pow(10, i);
    bina = bina / 2;
  }
  return ans;
}
int main() {
  int N, M;
  cin >> N >> M;
  int a[M + 1][N + 1];
  int dkazu[M + 1];
  for (int i = 0; i < M; i++) {
    for (int k = 0; k < N; k++) {
      a[i][k] = 0;
    }
  }
  for (int i = 0; i < M; i++) {
    cin >> dkazu[i];
    for (int k = 0; k < dkazu[i]; k++) {
      cin >> a[i][k];
    }
  }
  int tn[M];
  for (int i = 0; i < M; i++) {
    cin >> tn[i];
  }
  int ans = 0;
  int temp = 0;
  for (int i = 1; i < pow(2, N + 1); i++) {
    string s = to_string(binary(i));
    for (int k = 0; k < M; k++) {
      int ko;
      for (int p = 0; p < dkazu[k]; p++) {
        if (a[k][p] - 1 < s.size() && s.at(a[k][p] - 1) == 1) {
          ko++;
        }
      }
      if (ko % 2 == tn[k]) {
        temp++;
      }
    }
    if (temp == M) {
      ans++;
    }
  }
  cout << ans << endl;
  return 0;
}
