n,m=map(int,input().split())
s=[] #全kについて、スイッチの状態を格納する。s[][]で呼び出し
for i in range(m):
	switch=[] #各kについて、スイッチの状態を一旦格納する
	k,*switch=map(int,input().split())
	#switch[i]はswitchの番号であり[1,n]なので、インデックスを1つずつ減らす
	for i in range(k):
		switch[i]-=1
	s.append(switch)
p=list(map(int,input().split()))
'''
print(p) ->[1, 0]
print(s) ->[[0, 1, 4], [1, 2]]
'''
'''
state=format(4,'b')
state=state.zfill(n)
print(state)
print(s[1][1])
print(state[s[1][1]])
'''
count=0
for i in range(2**n):
	q=[] #各状態に対して、各電球につながっているスイッチのon数の偶奇を格納する配列
	state=format(i,'b')
	state=state.zfill(n)
	for i in range(m):
		on=0
		for j in range(k):
			on+=int(state[s[i][j]])
		on=on%2
		q.append(on)
		
	allon=1
	for i in range(m):
		if p[i]!=q[i]:
			allon=0
			break
	if allon:
		count+=1
print(count)