#include <iostream>
#include <vector>
#include <algorithm>
#include <cstdio>
#include<string.h>
const int N=110;
using namespace std;
int n,m,ans;
vector<int>a[N];
int p[N]vis[N];

void dfs(int x){
	int q[N];
    if(x==n+1){
        memset(q,0,sizeof(q));
        for(int i=1;i<=n;i++){
            if(vis[i]==0) continue;
            for(int j=1;j<a[i].size();j++){
                int k=a[i][j];
                q[k]++;
            }
        }
        for(int i=1;i<=m;i++) if(q[i]%2!=p[i]) return;
        ans++;
        return;
    }
    dfs(x+1);vis[x]=1;
    dfs(x+1);vis[x]=0;
}
int main(){
    int n,m;cin>>n>>m;
    for(int i=1;i<=m;i++){
        int k;cin>>k;
        for(int j=1;j<=k;j++){
            int k;cin>>k;
            a[k].push_back(i);
        }
    }
    for(int i=1;i<=m;i++) cin>>p[i];
    dfs(1);
    cout<<ans;
    return 0;
}
