#include <iostream>
#include <map>
#include <algorithm>
#include <vector>

using namespace std;
using lli = long long int;

vector<lli> vec[10] = {};

lli p[10] = {};
lli swi[10] = {};

int main(void) {

	lli N, M;
	cin >> N >> M;

	for (int i = 0; i < M; i++) {
		lli K;
		cin >> K;
		for (int j = 0; j < K; j++) {
			lli s;
			cin >> s;
			vec[i].push_back(s);
		}
	}

	for (int i = 0; i < M; i++) {
		cin >> p[i];
	}

	lli ans = 0;

	for (int i = 0; i < (int)pow(2, N); i++) {
		for (int j = 0; j < N; j++) {
			swi[j] = (i >> j) % 2;
		}

		lli light = 0;

		for (int j = 0; j < M; j++) {
			lli sum = 0;

			for (size_t k = 0; k < vec[j].size(); k++) {
				sum += swi[vec[j][k] - 1];
			}

			if (sum % 2 == p[j]) {
				light += 1;
			}

		}

		if (light == M) {
			ans++;
		}

	}

	cout << ans << endl;

	return 0;
}