#include <bits/stdc++.h>
using namespace std;
int k, n, m;
int blo;
int a[100010];
long long ans[100010];
int flag[1 << 20];
struct pro {
  int l;
  int r;
  int p;
} e[100010];
long long as;
bool cmp(pro a, pro b) {
  if ((a.l - 1) / blo == (b.l - 1) / blo) {
    return a.r < b.r;
  }
  return a.l < b.l;
}
int del(int p) {
  flag[a[p]]--;
  as -= flag[a[p] ^ k];
  return 0;
}
int add(int p) {
  as += flag[a[p] ^ k];
  flag[a[p]]++;
  return 0;
}
int main() {
  scanf("%d%d%d", &n, &m, &k);
  blo = sqrt(n);
  for (int i = 1; i <= n; i++) {
    scanf("%d", &a[i]);
    a[i] ^= a[i - 1];
  }
  for (int i = 0; i < m; i++) {
    scanf("%d%d", &e[i].l, &e[i].r);
    e[i].p = i;
  }
  sort(e, e + m, cmp);
  int l = 1;
  int r = 0;
  flag[0] = 1;
  as = 0;
  for (int i = 0; i < m; i++) {
    while (l < e[i].l) {
      del(l - 1);
      l++;
    }
    while (l > e[i].l) {
      l--;
      add(l - 1);
    }
    while (r < e[i].r) {
      r++;
      add(r);
    }
    while (r > e[i].r) {
      del(r);
      r--;
    }
    ans[e[i].p] = as;
  }
  for (int i = 0; i < m; i++) {
    printf("%I64d\n", ans[i]);
  }
  return 0;
}
