#include <bits/stdc++.h>
using namespace std;
//试除法 求是否是质数
int a[20];
char b[20];
vector<int> v[110];
int n,m,k;
int ans = 0;
void dfs(int dep) {
if (dep > n) {
//先假设能通过测试
int flag = 1;
for(int i=0;i<m;i++) {
int cnt = 0;
for(int &j:v[i]) {
//a[j] 是钥匙真假状态 j是钥匙的编号
cnt += a[j];
}
//如果能打开x这个门
if (b[i] == 'o') {
//钥匙至少要是k把是真的
if(cnt < k) {
flag = 0;
break;
}
}
if (b[i] == 'x'){
if (cnt >= k) {
flag = 0;
break;
}
}
}
ans += flag;
return;
}
a[dep] = 1;
dfs(dep+1);
a[dep] = 0;
dfs(dep+1);
}
int main() {
freopen("Keys.in","r",stdin);
freopen("Keys.out","w",stdout);
cin >> n >> m >> k;
for(int i=0;i<m;i++) {
int c;
cin >> c;
for(int j=0;j<c;j++) {
int x;
cin >> x;
v[i].push_back(x);
}
cin >> b[i];
}
//v[0] 1,2,3 b[0] o
//v[1] 2,3 b[1] x
dfs(1);
cout << ans << endl;
fclose(stdin);
fclose(stdout);
return 0;
}