#include <bits/stdc++.h>
int N, M;
int k[10 + 1];
int s[10 + 1][10 + 1];
int p[10 + 1];
bool flag[10 + 1];
int count;
void func() {
  int c, total;
  total = 0;
  for (int i = 1; i <= M; i++) {
    c = 0;
    for (int j = 1; j <= k[i]; j++) {
      if (flag[s[i][j]] == true) {
        c++;
      }
    }
    if (c % 2 == p[i]) {
      total++;
    }
  }
  if (total == M) {
    count++;
  }
}
void select(int ord) {
  if (ord > N) {
    func();
    return;
  }
  flag[ord] = true;
  select(ord + 1);
  flag[ord] = false;
  select(ord + 1);
}
int main() {
  std::cin >> N >> M;
  for (int i = 1; i <= M; i++) {
    std::cin >> k[i];
    for (int j = 1; j <= k[i]; j++) {
      std::cin >> s[i][j];
    }
  }
  for (int i = 1; i <= M; i++) {
    std::cin >> p[i];
  }
  select(1);
  std::cout << count << std::endl;
  return 0;
}
