# review
n, m= map(int, input().split())
ks = [list(map(int, input().split()))[1:] for _ in range(m)]
p = list(map(int, input().split()))

# 指定された電球(sたち)が全部付いているときを10進数にしてリスト
s = []
for i in ks :
        t = 0
        for j in range(len(i)) :
                t += 2**(n-i[j])
                s.append(t)

# 2**nまでの二進数の中で電球１がつくやつ→電球２がつく→・・・最後まで満たしたら1を足す。を繰り返す
ans = 0
for i in range(2**n) :
        flag = True
        for j in range(m) :
                if bin(s[j] & i).count('1') % 2 != p[j] :
                        flag = False
                        break
        if flag :
                ans += 1
print(ans)