只对了前4个点
#include<bits/stdc++.h>
#define M 200001
#define N 200000001
#define inf 0x3f3f3f3f
#define ls p<<1
#define rs p<<1|1
#define ll long long
using namespace std;
inline ll read()
{
ll k=0,f=0;char c=getchar();
for(;!isdigit(c);c=getchar()) f|=c=='-';
for(;isdigit(c);c=getchar()) k=(k<<1)+(k<<3)+(c^48);
return f?-k:k;
}
ll n,m,x,block,a[M];
ll s[N],ans[M],res;
struct node
{
ll l,r,idx;
}w[M];
bool cmp(node x,node y)
{
if(x.l/block==y.l/block) return x.r<y.r;
else return x.l/block<y.l/block;
}
void add(ll k)
{
if(s[k^x]) res++;
s[k]++;
}
void del(ll k)
{
s[k]--;
if(s[k^x]) res--;
}
int main()
{
n=read(),m=read(),x=read(),block=pow(n,0.5);
for(ll i=1;i<=n;i++) a[i]=read();
for(ll i=1;i<=m;i++) w[i].l=read(),w[i].r=read(),w[i].idx=i;
sort(w+1,w+m+1,cmp);
// for(ll i=1;i<=m;i++) printf("%d %d\n",w[i].l,w[i].r);
ll l=1,r=0;
for(ll i=1;i<=m;i++)
{
while(l>w[i].l) add(a[--l]);
while(r<w[i].r) add(a[++r]);
while(l<w[i].l) del(a[l++]);
while(r>w[i].r) del(a[r--]);
ans[w[i].idx]=res;
}
for(ll i=1;i<=m;i++)
{
if(ans[i]==0) printf("no\n");
else printf("yes\n");
}
return 0;
}