#include <bits/stdc++.h>
using namespace std;
int n, m, c, k, ans;
vector<int> guide;
set<int> siliao;
set<int> animal;
bool change(int n, int m) {
return (n >> m) & 1;
}
int main() {
cin >> n >> m >> c >> k;
if(m==0)
{
cout<<18446744073709551615;
return 0;
}
for (int i = 0; i < n; i++) {
int cn;
cin >> cn;
animal.insert(cn);
}
for (int i = 0; i < m * 2; i++) {
int ct;
cin >> ct;
guide.push_back(ct);
}
for (auto i: animal) {
for (int j = 0; j < guide.size() - 1; j += 2) {
if (change(i, guide[j])) {
siliao.insert(guide[j + 1]);
}
}
}
for (int i = 1; i <= pow(2, k); i++) {
bool flag = 1;
if (animal.find(i) != animal.end()) continue;
for (int j = 0; j < guide.size() - 1; j += 2)
if (change(i, j) && siliao.find(guide[j + 1]) == siliao.end()) {
flag = 0;
break;
}
if (flag) ans++;
}
cout << ans;
return 0;
}
为啥语法错误