注意读入范围,一定不能用int进行读入,至少是long long,否则会错
本蒻蒟不会太深奥的位运算,用高精度代替,也不难
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int MAXN=1e3;
const int INF=2147483647;
ll n,m,c,k,x,ans,a[MAXN],cnt,sum[MAXN]={0,1},len=1,extra[MAXN];
bool vis[MAXN];
void mul(){
for(int i=1;i<=len;i++){
sum[i]<<=1ull;
sum[i]+=extra[i];
extra[i+1]=sum[i]/10,sum[i]%=10;
extra[i]=0;
}
if(extra[len+1]){
sum[++len]+=extra[len];
extra[len]=0;
}
}
void subtract(int x){
int i=0,y;
while(x){
i++,y=x%10,x/=10;
if(sum[i]<y) sum[i]+=10,sum[i+1]--;
sum[i]-=y;
}
}
int main(){
cin>>n>>m>>c>>k;
ll x,p,q;
for(int i=1;i<=n;i++){
scanf("%lld",&x);
ans|=x;
}
while(ans){
a[++cnt]=ans%2;
ans/=2;
}
for(int i=1;i<=k;i++) vis[i]=true;
for(int i=1;i<=m;i++){
scanf("%lld%lld",&p,&q);
p++;
if(a[p]==0) vis[p]=false;
}
for(int i=k;i>=1;i--) if(vis[i]) mul();
subtract(n);
for(int i=len;i>=1;i--) cout<<sum[i];
return 0;
}