#include <iostream>
#include <cstdio>
#include <string>
#include <sstream>
#include <algorithm>
#include <cmath>
#include <vector>
#include <set>
#include <map>
#include <queue>
using namespace std;

int main() {
    int N,M;
    cin >> N>>M;
    vector<int> k(M),p(M);
    vector<vector<int, int>> s(M);
    for (int i=0; i<M; i++) {
        cin>>k[i];
        s[i].resize(k[i]);
        for (int j=0; j<k[i]; i++) {
            cin >> s[i][j];
        }
    }
    for (int i=0; i<M; i++) {
        cin>>p[i];
    }
    
    vector<int> sw(N,0);
    int ans =0;
    for (int i=0; i<pow(2, N); i++) {
        
        
        for (int j=0; j<M; j++) {
            int sum=0;
            for (int l=0; l<k[j]; l++) {
                sum+=sw[s[j][l]];
            }
            if (sum%2==p[j]) {
                ans++;
            }
            
        }
        sw[0]++;
        for (int j=0; j<N; j++) {
            if (i==pow(2, N)-1) {
                break;
            }
            if (sw[j]>1) {
                sw[j]=0;
                sw[j+1]++;
            }
        }
    }
    
    cout << ans << endl;
}
