1 #include <bits/stdc++.h>
2
3 using namespace std;
4 const int N = 1<<20;
5 struct node
6 {
7 int l,r,id;
8 }Q[N];
9
10 int ans[N];
11 long long answer[N];
12 long long flag[N];
13 int a[N];
14 bool cmp(node x,node y)
15 {
16 if(ans[x.l]==ans[y.l])
17 return x.r<y.r;
18 return ans[x.l]<ans[y.l];
19 }
20 int n,m,k;
21 int L = 1,R = 0;
22 long long Ans= 0;
23 void add(int x)
24 {
25 Ans+=flag[a[x]^k];
26 flag[a[x]]++;
27 }
28 void del(int x)
29 {
30 flag[a[x]]--;
31 Ans-=flag[a[x]^k];
32 }
33 int main()
34 {
35
36 scanf("%d%d%d",&n,&m,&k);
37 int sz = sqrt(n);
38 for(int i = 1; i <= n; i++){
39 scanf("%d",&a[i]);
40 a[i] = a[i-1]^a[i];
41 ans[i] = i/sz;
42 }
43 flag[0] = 1;
44 for(int i = 1; i <= m; i++)
45 {
46 scanf("%d%d",&Q[i].l,&Q[i].r);
47 Q[i].id = i;
48 }
49 sort(Q+1,Q+m+1,cmp);
50 for(int i = 1; i <= m; i++)
51 {
52 while(L<Q[i].l)
53 {
54 del(L-1);
55 L++;
56 }
57 while(L>Q[i].l)
58 {
59 L--;
60 add(L-1);
61 }
62 while(R<Q[i].r)
63 {
64 R++;
65 add(R);
66 }
67 while(R>Q[i].r)
68 {
69 del(R);
70 R--;
71 }
72 answer[Q[i].id] = Ans;
73 }
74 for(int i = 1; i <= m; i++)
75 {
76 printf("%lld\n",answer[i]);
77 }
78 return 0;
79 }