#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#define re register int
#define il inline
using namespace std;
const int N=1e6+10;
struct Node{
int l,r,id;
}qj[N/10];
int a[N/10],n,m,L=1,R,pos[N/10],k;
long long cnt[N],ans[N],res;
il bool cmp(Node a,Node b){
if(pos[a.l]!=pos[b.l])return pos[a.l]<pos[b.l];
if(pos[a.l]%2==0)return a.r<b.r;
return a.r>b.r;
}
il void Add(int x){
res+=cnt[k^a[x]];
cnt[a[x]]++;
}
il void Del(int x){
cnt[a[x]]--;
res-=cnt[k^a[x]];
}
int main(){
scanf("%d%d%d",&n,&m,&k);
int g=sqrt(n);
for(re i=1;i<=n;i++){
scanf("%d",&a[i]);
a[i]^=a[i-1];
pos[i]=i/g;
}
for(re i=1;i<=m;i++){
scanf("%d%d",&qj[i].l,&qj[i].r);
qj[i].l--;
qj[i].id=i;
}
sort(qj+1,qj+m+1,cmp);
// cnt[0]=1;
for(re i=1;i<=m;i++){
while(L>qj[i].l)Add(--L);
while(R<qj[i].r)Add(++R);
while(L<qj[i].l)Del(L++);
while(R>qj[i].r)Del(R--);
ans[qj[i].id]=res;
}
for(re i=1;i<=m;i++)printf("%lld\n",ans[i]);
return 0;
}
明明另一道一模一样的题可以过(