#include <bits/stdc++.h>
int N, M, A[10], B[10][10], C[10], ans, flg[10];
void dfs(int n, int ab) {
  int i, j, k;
  if (n == N) {
    for (i = 0; i < M; i++) {
      k = 0;
      for (j = 0; j < N; j++) {
        if ((B[i][j] * flg[j]) == 1) {
          k++;
        }
      }
      if (k % 2 != C[i]) {
        for (i = 0; i < N; i++) flg[i] = 0;
        n = 0;
        return;
      }
    }
    ans++;
    n = 0;
    for (i = 0; i < N; i++) {
      flg[i] = 0;
    }
  } else {
    if (ab == 1) {
      flg[n] = 1;
      dfs(n + 1, 0);
      dfs(n + 1, 1);
    } else
      flg[n] = 0;
    dfs(n + 1, 0);
    dfs(n + 1, 1);
  }
}
int main() {
  ans = 0;
  int i, j, kk;
  scanf("%d %d", &N, &M);
  for (i = 0; i < 10; i++) {
    for (j = 0; j < 10; j++) {
      B[i][j] = 0;
    }
  }
  for (i = 0; i < M; i++) {
    scanf("%d ", &A[i]);
    for (j = 0; j < A[i]; j++) {
      scanf("%d ", &kk);
      B[i][kk - 1] = 1;
    }
  }
  for (i = 0; i < M; i++) scanf("%d ", &C[i]);
  dfs(0, 1);
  dfs(0, 0);
  printf("%d\n", ans);
  return 0;
}
