#include <bits/stdc++.h>
using namespace std;
long long mod = 1000000007;
long long mod2 = 998244353;
long long inf = 1000000000000000000;
long long lmax(long long a, long long b) {
  if (a < b)
    return b;
  else
    return a;
}
long long lmin(long long a, long long b) {
  if (a < b)
    return a;
  else
    return b;
}
bool cmp(pair<string, int> a, pair<string, int> b) {
  if (a.first == b.first)
    return a.second > b.second;
  else
    return a.first < b.first;
}
int main() {
  int n, m;
  cin >> n >> m;
  vector<int> s[m];
  int k[m];
  for (int i = 0; i < m; i++) {
    cin >> k[i];
    for (int j = 0; j < k[i]; j++) {
      int w;
      cin >> w;
      w--;
      s[j].push_back(w);
    }
  }
  int p[m];
  for (int i = 0; i < m; i++) cin >> p[i];
  int u = pow(2, n);
  int ans = 0;
  for (int i = 0; i < u; i++) {
    int c[n];
    for (int j = 0; j < n; j++) {
      int y = pow(2, j);
      int r = i / y;
      c[j] = r % 2;
    }
    int o = 0;
    for (int j = 0; j < m; j++) {
      int cnt = 0;
      for (int l = 0; l < s[j].size(); l++) cnt += c[s[j][l]];
      if (cnt % 2 != p[j]) {
        o = 1;
        break;
      }
    }
    if (o == 0) ans++;
  }
  cout << ans << endl;
}
