#include <bits/stdc++.h>
using namespace std;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
#define PI 3.14159265358979323846
constexpr int INF = numeric_limits<int>::max() / 2;
constexpr long long INFL = numeric_limits<long long>::max() / 2;
constexpr int MOD = 1000000007;
using Graph = vector<vector<int>>;



int main() {
    cin.tie(nullptr);
    ios::sync_with_stdio(false);

    int N,M;
    cin >> N >> M;
    vector<vector<int>> v;
    int k[M];
    for(int i=0;i<M;i++){
        cin >> k[i];
        v[i].resize(k[i]);
        for(int j=0;j<k[i];j++){
            cin >> v[i][j];
            v[i][j]--;
        }
    }
    int p[M];

    rep(i,M) cin >> p[i];
    int ans=0;
    for(int bit=0;bit < (1<<N);bit++){
        int r[M]={};
        for(int i=0;i<N;i++){
            if(bit & (1<<i)){
                for(int j=0;j<k[i];j++){
                    r[v[i][j]]++;
                }
            }
        }
        bool z=true;
        rep(i,M){
            if(r[i]%2!=p[i]) z=false;
        }
        if(z) ans++;
    }
    cout << ans << endl;




}
