using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AtCorder
{
	public class Program
	{
		static void Main(string[] args)
		{
			C();
		}


		public static void C()
		{
			Scanner cin = new Scanner();
			int n = cin.Int();
			int m = cin.Int();
			List<int>[] f = new List<int>[n];
			for (int i = 0; i < n; i++) {
				int t = cin.Int();
				f[i] = new List<int>();
				for (int j = 0; j < t; j++) {
					f[i].Add(cin.Int());
				}
			}

			int[] p = new int[m];
			for (int i = 0; i < m; i++) {
				p[i] = cin.Int();
			}

			int ans = 0;
			int l = (int)Math.Pow(2, n);
			for (int k = 0; k < l; k++) {
				bool ok = true;
				for (int i = 0; i < n; i++) {
					int cnt = 0;
					for (int j = 0; j < f[i].Count; j++) {
						if ((f[i][j] & i) != 0) {
							++cnt;
						}
					}

					if (cnt % 2 != p[i]) {
						ok = false;
						break;
					}
				}

				if (ok) {
					++ans;
				}

			}

			Console.WriteLine(ans);
		}

	}

	public class Scanner
	{
		string[] s;
		int i;

		char[] cs = new char[] { ' ' };

		public Scanner()
		{
			s = new string[0];
			i = 0;
		}

		public string Next()
		{
			if (i < s.Length) return s[i++];
			string st = Console.ReadLine();
			while (st == "") st = Console.ReadLine();
			s = st.Split(cs, StringSplitOptions.RemoveEmptyEntries);
			if (s.Length == 0) return Next();
			i = 0;
			return s[i++];
		}

		public int Int()
		{
			return int.Parse(Next());
		}
		public int[] ArrayInt(int N, int add = 0)
		{
			int[] Array = new int[N];
			for (int i = 0; i < N; i++) {
				Array[i] = Int() + add;
			}
			return Array;
		}

		public long Long()
		{
			return long.Parse(Next());
		}

		public long[] ArrayLong(int N, long add = 0)
		{
			long[] Array = new long[N];
			for (int i = 0; i < N; i++) {
				Array[i] = Long() + add;
			}
			return Array;
		}

		public double Double()
		{
			return double.Parse(Next());
		}


		public double[] ArrayDouble(int N, double add = 0)
		{
			double[] Array = new double[N];
			for (int i = 0; i < N; i++) {
				Array[i] = Double() + add;
			}
			return Array;
		}
	}
}
