#include <bits/stdc++.h>
using namespace std;
int main() {
  int N;
  int M;
  int a;
  cin >> N >> M;
  int ans = 0;
  vector<int> vec(N + 1);
  vector<int> mm(M);
  vector<int> swit(200);
  a = 0;
  cin >> mm.at(0);
  for (int j = 0; j < mm.at(0); j++) {
    cin >> swit.at(j);
  }
  for (int i = 1; i < M; i++) {
    cin >> a;
    mm.at(i) = mm.at(i - 1) + a;
    for (int j = mm.at(i - 1); j < mm.at(i); j++) {
      cin >> swit.at(j);
    }
  }
  int vv = 0;
  int p;
  int anss = pow(2, N);
  vector<int> pp(M);
  for (int i = 0; i < M; i++) {
    cin >> pp.at(i);
  }
  for (int i = 0; i < pow(2, N); i++) {
    for (int j = 0; j < N; j++) {
      int bb = pow(2, (N - j));
      vec.at(j) = (i % bb) / pow(2, (N - j - 1));
    }
    for (int k = 0; k < mm.at(0); k++) {
      int pop = swit.at(k);
      vv = vv + vec.at(pop);
    }
    if (vv % 2 != pp.at(0)) {
      anss = anss - 1;
    } else {
      for (int n = 1; n < M; n++) {
        vv = 0;
        for (int k = mm.at(n - 1); k < mm.at(n); k++) {
          int jkl = swit.at(k);
          vv = vv + vec.at(jkl);
        }
        if (vv % 2 != pp.at(n)) {
          anss = anss - 1;
          break;
        }
      }
    }
  }
  cout << anss << endl;
}
