#include <bits/stdc++.h>
using namespace std;
int a[100010];
int cnt[1050000];
struct _ {
  int l, r, id;
} b[100010];
int S;
bool cmp(_ x, _ y) {
  if (x.l / S != y.l / S) return x.l / S < y.l / S;
  return x.r < y.r;
}
long long anss[100010];
int main() {
  int n, m, k;
  scanf("%d%d%d", &n, &m, &k);
  S = sqrt(n);
  int i;
  for (i = 1; i <= n; i++) {
    scanf("%d", &a[i]);
    a[i] = a[i] ^ a[i - 1];
  }
  long long ans = 0;
  int L = 1, R = 1;
  cnt[a[1]] = 1;
  int l, r;
  for (i = 1; i <= m; i++) {
    scanf("%d%d", &b[i].l, &b[i].r);
    b[i].id = i;
  }
  sort(b + 1, b + 1 + m, cmp);
  for (i = 1; i <= m; i++) {
    l = b[i].l - 1;
    r = b[i].r;
    while (R < r) {
      R++;
      ans += cnt[k ^ a[R]];
      cnt[a[R]]++;
    }
    while (L > l) {
      L--;
      ans += cnt[k ^ a[L]];
      cnt[a[L]]++;
    }
    while (R > r) {
      cnt[a[R]]--;
      ans -= cnt[k ^ a[R]];
      R--;
    }
    while (L < l) {
      cnt[a[L]]--;
      ans -= cnt[k ^ a[L]];
      L++;
    }
    anss[b[i].id] = ans;
  }
  for (i = 1; i <= m; i++) {
    printf("%lld\n", anss[i]);
  }
  return 0;
}
