#include <stdio.h>
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
	int N, M;
	cin >> N >> M;
	
	vector<vector<int>> sw(N, vector<int>());
	vector<int> p;

	for (int i = 0; i < M; i++)
	{
		int k;
		cin >> k;

		for (int j = 0; j < k; j++)
		{
			int s;
			cin >> s;

			sw[i].emplace_back(s-1);
		}
	}

	for (int i = 0; i < M; i++)
	{
		int j;
		cin >> j;

		p.emplace_back(j);
	}

	int light[10];
	int count = 0;

	for (int i = 0; i < pow(2, N); i++)
	{
		memset(light, 0, M * sizeof(int));

		for (int j = 0; j < N; j++)
		{
			if ((i >> j) & 1)
			{
				for (int k = 0; k < sw[j].size(); k++)
				{
					light[sw[j][k]] ++;
				}
			}
		}

		bool flag = true;
		for (int j = 0; j < M; j++)
		{
			if (light[j] % 2 != p[j])
			{
				flag = false;
				break;
			}
		}

		if (flag)
		{
			count++;
		}
	}

	cout << count << endl;

	return 0;
}

