#include <bits/stdc++.h>
using namespace std;
const int fx[4][2] = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};
const int fxx[8][2] = {{0, 1}, {0, -1}, {1, 0},  {-1, 0},
                       {1, 1}, {1, -1}, {-1, 1}, {-1, -1}};
const int rogi[4][2] = {{1, 1}, {1, -1}, {-1, 1}, {-1, -1}};
int kto[11][11];
bool stan[11];
int n, m;
void dane() {
  cin >> n >> m;
  for (int i = 0; i < n; i++) {
    int ile;
    cin >> ile;
    for (int j = 0; j < ile; j++) {
      int b;
      cin >> b;
      kto[i][b - 1] = true;
    }
  }
  for (int i = 0; i < m; i++) {
    int a;
    cin >> a;
    stan[i] = a == 1;
  }
  int ans = 0;
  for (int wlacz = 0; wlacz < (1 << n); wlacz++) {
    int* dod = new int[11];
    int temp = 1;
    int idx = 0;
    while (idx != n) {
      if ((wlacz & temp) != 0) {
        for (int i = 0; i < m; i++) {
          if (kto[idx][i] == true) {
            dod[i]++;
          }
        }
      }
      temp *= 2;
      idx++;
    }
    bool dziala = true;
    for (int i = 0; i < m; i++) {
      int war = (stan[i] == true ? 1 : 0) + dod[i];
      if (war % 2 == 1) dziala = false;
    }
    if (dziala) ans++;
  }
  cout << ans << endl;
}
int main() {
  ios_base::sync_with_stdio(0);
  dane();
  return 0;
}
