#include<bits/stdc++.h>
using namespace std;
long long n,m,c,k;
long long ans=0,nm=0;
long long a[1000005];
bool che[1000005];
int main(){
cin>>n>>m>>c>>k;
for(long long i=1;i<=n;i++){
scanf("%lld",&a[i]);
}
for(int i=1;i<=m;i++){
long long p,q;
scanf("%lld%lld",&p,&q);
if(!che[p]){
nm+=(1<<p);
che[p]=1;
}
}
for(long long i=1;i<=n;i++){
if(a[i] & nm){
nm-=(a[i] & nm);
}
}
for(long long i=0;i< (1<<k);i++){
if(i & nm)
continue;
ans++;
}
printf("%lld",ans-n);
return 0;
}
只A了前面12个点,60分
思路是先把所有需要满足的规则位数记录下来,再把已满足的删去,剩下一定不能为1的位置,再枚举1<<k所有的数来判断ans是否++。看不出哪里错了啊,求助大佬