使用莫队
#include<bits/stdc++.h>
#define get(x) (((x)-1)/len)
using namespace std;
const int N=2e5+50;
long long a[N],ans[N],f[N],len,l,r;
long long res;
int n,m,k;
struct query{
int l,r,id;
bool operator < (query b){
if(get(l)==get(b.l))return r<b.r;
return get(l)<get(b.l);
}
}q[N];
inline void add(int p){
res+=f[a[p]^k];
f[a[p]]++;
}
inline void del(int p){
f[a[p]]--;
res-=f[a[p]^k];
}
int main(){
//ios::sync_with_stdio(0);
//cin.tie(0);cout.tie(0);
cin>>n>>m>>k;
len=sqrt(n);
for(int i=1;i<=n;i++)cin>>a[i],a[i]^=a[i-1];
for(int i=1;i<=m;i++){
cin>>q[i].l>>q[i].r;
q[i].id=i;
}
sort(q+1,q+m+1);
l=1,r=0;
f[0]=1;
for(int i=1;i<=m;i++){
while(l<q[i].l)del(l++);
while(l>q[i].l)add(--l);
while(r<q[i].r)add(++r);
while(r>q[i].r)del(r--);
ans[q[i].id]=res;
}
for(int i=1;i<=m;i++){
cout<<ans[i]<<'\n';
}
return 0;
}