#include <bits/stdc++.h>
using namespace std;
int main() {
  int N, M;
  cin >> N >> M;
  vector<vector<int> > K;
  for (int i = 0; i < (int)(M); i++) {
    int k;
    cin >> k;
    vector<int> TMP;
    for (int i = 0; i < (int)(k); i++) {
      int tmp;
      cin >> tmp;
      TMP.push_back(tmp - 1);
    }
    K.push_back(TMP);
  }
  vector<int> p(M);
  for (int i = 0; i < (int)(M); i++) cin >> p[i];
  long long ans = 0;
  vector<int> array;
  for (int bit = 0; bit < (int)((1 << N)); bit++) {
    vector<bool> use(M, false);
    for (int i = 0; i < (int)(N); i++) {
      if (bit & (1 << i)) {
        use[i] = true;
      }
    }
    bool flag = true;
    for (int j = 0; j < (int)(K.size()); j++) {
      int num = 0;
      for (int k = 0; k < (int)(K[j].size()); k++) {
        if (use[k]) num++;
      }
      if ((p[j] && (num + 2) % 2 == 0) || (!p[j] && (num + 2) % 2 != 0)) {
        flag = false;
        break;
      }
    }
    if (flag) ans++;
  }
  cout << ans << endl;
}
