// ~~ icebear ~~
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
typedef pair<int, ii> iii;
template<class T>
bool minimize(T &a, const T &b) {
if (a > b) return a = b, true;
return false;
}
template<class T>
bool maximize(T &a, const T &b) {
if (a < b) return a = b, true;
return false;
}
#define FOR(i,a,b) for(int i=(a); i<=(b); ++i)
#define FORR(i,a,b) for(int i=(a); i>=(b); --i)
#define REP(i, n) for(int i=0; i<(n); ++i)
#define RED(i, n) for(int i=(n)-1; i>=0; --i)
#define MASK(i) (1LL << (i))
#define BIT(S, i) (((S) >> (i)) & 1)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define all(x) x.begin(), x.end()
#define task "icebear"
const int MOD = 1e9 + 7;
const int inf = 1e9 + 27092008;
const ll INF = 1e18 + 27092008;
const int N = 1e5 + 5;
const int BLOCK_SIZE = 300;
int n, q, k, a[N];
vector<int> masks[15];
struct Query {
int l, r, id;
bool operator < (const Query &other) const {
if (l / BLOCK_SIZE != other.l / BLOCK_SIZE) return l < other.l;
return r < other.r;
}
} Q[N];
struct Segment {
int l, r, id, sign;
Segment(int _l = 0, int _r = 0, int _id = 0, int _sign = 0):
l(_l), r(_r), id(_id), sign(_sign) {}
};
vector<Segment> segments[N];
ll pref[N], ans[N];
int cnt[N];
void init(void) {
cin >> n >> q >> k;
FOR(i, 1, n) cin >> a[i];
FOR(i, 1, q) cin >> Q[i].l >> Q[i].r, Q[i].id = i;
REP(i, MASK(14)) masks[__builtin_popcount(i)].pb(i);
sort(Q + 1, Q + q + 1);
}
void process(void) {
// f(l, r, p) : answer while adding a[p]
// F(r, p) = f(1, r, p)
int L = 1, R = 0;
FOR(i, 1, q) {
int l = Q[i].l, r = Q[i].r;
// f(l, r + 1, r + 1) - f(l, r, r) = F(r + 1, r + 1) - F(l - 1, r + 1)
if (R < r) segments[L - 1].emplace_back(R + 1, r, Q[i].id, -1), R = r;
// f(l - 1, r, l - 1) - f(l, r, l) = F(r, l - 1) - F(l - 1, l - 1)
if (L > l) segments[R].emplace_back(l, L - 1, Q[i].id, +1), L = l;
// f(l, r, r) - f(l, r - 1, r - 1) = -F(r, r) + F(l - 1, r)
if (R > r) segments[L - 1].emplace_back(r + 1, R, Q[i].id, +1), R = r;
// f(l, r, l) - f(l + 1, r, l + 1) = -F(r, l) + F(l, l)
if (L < l) segments[R].emplace_back(L, l - 1, Q[i].id, -1), L = l;
}
FOR(i, 1, n) {
for(int x : masks[k]) cnt[a[i] ^ x]++;
pref[i] = pref[i - 1] + cnt[a[i]];
for(auto event : segments[i]) {
ll sum = 0;
FOR(i, event.l, event.r) sum += cnt[a[i]];
ans[event.id] += sum * event.sign;
}
}
L = 1, R = 0;
FOR(i, 1, q) {
int l = Q[i].l, r = Q[i].r;
if (R < r) ans[Q[i].id] += pref[r] - pref[R], R = r;
if (R > r) ans[Q[i].id] -= pref[R] - pref[r], R = r;
if (L > l) ans[Q[i].id] -= pref[L - 1] - pref[l - 1], L = l;
if (L < l) ans[Q[i].id] += pref[l - 1] - pref[L - 1], L = l;
ans[Q[i].id] += ans[Q[i - 1].id]; // changes + before
}
FOR(i, 1, q) cout << ans[i] << '\n';
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
if (fopen(task".inp", "r")) {
freopen(task".inp", "r", stdin);
freopen(task".out", "w", stdout);
}
int tc = 1;
// cin >> tc;
while(tc--) {
init();
process();
}
return 0;
}
Ly8gfn4gaWNlYmVhciB+fgojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnR5cGVkZWYgbG9uZyBsb25nIGxsOwp0eXBlZGVmIHBhaXI8aW50LCBpbnQ+IGlpOwp0eXBlZGVmIHBhaXI8aW50LCBpaT4gaWlpOwoKdGVtcGxhdGU8Y2xhc3MgVD4KICAgIGJvb2wgbWluaW1pemUoVCAmYSwgY29uc3QgVCAmYikgewogICAgICAgIGlmIChhID4gYikgcmV0dXJuIGEgPSBiLCB0cnVlOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCnRlbXBsYXRlPGNsYXNzIFQ+CiAgICBib29sIG1heGltaXplKFQgJmEsIGNvbnN0IFQgJmIpIHsKICAgICAgICBpZiAoYSA8IGIpIHJldHVybiBhID0gYiwgdHJ1ZTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgojZGVmaW5lIEZPUihpLGEsYikgZm9yKGludCBpPShhKTsgaTw9KGIpOyArK2kpCiNkZWZpbmUgRk9SUihpLGEsYikgZm9yKGludCBpPShhKTsgaT49KGIpOyAtLWkpCiNkZWZpbmUgUkVQKGksIG4pIGZvcihpbnQgaT0wOyBpPChuKTsgKytpKQojZGVmaW5lIFJFRChpLCBuKSBmb3IoaW50IGk9KG4pLTE7IGk+PTA7IC0taSkKI2RlZmluZSBNQVNLKGkpICgxTEwgPDwgKGkpKQojZGVmaW5lIEJJVChTLCBpKSAoKChTKSA+PiAoaSkpICYgMSkKI2RlZmluZSBtcCBtYWtlX3BhaXIKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIGFsbCh4KSB4LmJlZ2luKCksIHguZW5kKCkKI2RlZmluZSB0YXNrICJpY2ViZWFyIgoKY29uc3QgaW50IE1PRCA9IDFlOSArIDc7CmNvbnN0IGludCBpbmYgPSAxZTkgKyAyNzA5MjAwODsKY29uc3QgbGwgSU5GID0gMWUxOCArIDI3MDkyMDA4Owpjb25zdCBpbnQgTiA9IDFlNSArIDU7CmNvbnN0IGludCBCTE9DS19TSVpFID0gMzAwOwppbnQgbiwgcSwgaywgYVtOXTsKdmVjdG9yPGludD4gbWFza3NbMTVdOwpzdHJ1Y3QgUXVlcnkgewogICAgaW50IGwsIHIsIGlkOwogICAgYm9vbCBvcGVyYXRvciA8IChjb25zdCBRdWVyeSAmb3RoZXIpIGNvbnN0IHsKICAgICAgICBpZiAobCAvIEJMT0NLX1NJWkUgIT0gb3RoZXIubCAvIEJMT0NLX1NJWkUpIHJldHVybiBsIDwgb3RoZXIubDsKICAgICAgICByZXR1cm4gciA8IG90aGVyLnI7CiAgICB9Cn0gUVtOXTsKCnN0cnVjdCBTZWdtZW50IHsKICAgIGludCBsLCByLCBpZCwgc2lnbjsKICAgIFNlZ21lbnQoaW50IF9sID0gMCwgaW50IF9yID0gMCwgaW50IF9pZCA9IDAsIGludCBfc2lnbiA9IDApOgogICAgICAgIGwoX2wpLCByKF9yKSwgaWQoX2lkKSwgc2lnbihfc2lnbikge30KfTsKdmVjdG9yPFNlZ21lbnQ+IHNlZ21lbnRzW05dOwpsbCBwcmVmW05dLCBhbnNbTl07CmludCBjbnRbTl07Cgp2b2lkIGluaXQodm9pZCkgewogICAgY2luID4+IG4gPj4gcSA+PiBrOwogICAgRk9SKGksIDEsIG4pIGNpbiA+PiBhW2ldOwogICAgRk9SKGksIDEsIHEpIGNpbiA+PiBRW2ldLmwgPj4gUVtpXS5yLCBRW2ldLmlkID0gaTsKICAgIFJFUChpLCBNQVNLKDE0KSkgbWFza3NbX19idWlsdGluX3BvcGNvdW50KGkpXS5wYihpKTsKICAgIHNvcnQoUSArIDEsIFEgKyBxICsgMSk7Cn0KCnZvaWQgcHJvY2Vzcyh2b2lkKSB7CiAgICAvLyBmKGwsIHIsIHApIDogYW5zd2VyIHdoaWxlIGFkZGluZyBhW3BdCiAgICAvLyBGKHIsIHApID0gZigxLCByLCBwKQoKICAgIGludCBMID0gMSwgUiA9IDA7CiAgICBGT1IoaSwgMSwgcSkgewogICAgICAgIGludCBsID0gUVtpXS5sLCByID0gUVtpXS5yOwogICAgICAgIC8vIGYobCwgciArIDEsIHIgKyAxKSAtIGYobCwgciwgcikgPSBGKHIgKyAxLCByICsgMSkgLSBGKGwgLSAxLCByICsgMSkKICAgICAgICBpZiAoUiA8IHIpIHNlZ21lbnRzW0wgLSAxXS5lbXBsYWNlX2JhY2soUiArIDEsIHIsIFFbaV0uaWQsIC0xKSwgUiA9IHI7CiAgICAgICAgLy8gZihsIC0gMSwgciwgbCAtIDEpIC0gZihsLCByLCBsKSA9IEYociwgbCAtIDEpIC0gRihsIC0gMSwgbCAtIDEpCiAgICAgICAgaWYgKEwgPiBsKSBzZWdtZW50c1tSXS5lbXBsYWNlX2JhY2sobCwgTCAtIDEsIFFbaV0uaWQsICsxKSwgTCA9IGw7CiAgICAgICAgLy8gZihsLCByLCByKSAtIGYobCwgciAtIDEsIHIgLSAxKSA9IC1GKHIsIHIpICsgRihsIC0gMSwgcikKICAgICAgICBpZiAoUiA+IHIpIHNlZ21lbnRzW0wgLSAxXS5lbXBsYWNlX2JhY2sociArIDEsIFIsIFFbaV0uaWQsICsxKSwgUiA9IHI7CiAgICAgICAgLy8gZihsLCByLCBsKSAtIGYobCArIDEsIHIsIGwgKyAxKSA9IC1GKHIsIGwpICsgRihsLCBsKQogICAgICAgIGlmIChMIDwgbCkgc2VnbWVudHNbUl0uZW1wbGFjZV9iYWNrKEwsIGwgLSAxLCBRW2ldLmlkLCAtMSksIEwgPSBsOwogICAgfQoKICAgIEZPUihpLCAxLCBuKSB7CiAgICAgICAgZm9yKGludCB4IDogbWFza3Nba10pIGNudFthW2ldIF4geF0rKzsKICAgICAgICBwcmVmW2ldID0gcHJlZltpIC0gMV0gKyBjbnRbYVtpXV07CgogICAgICAgIGZvcihhdXRvIGV2ZW50IDogc2VnbWVudHNbaV0pIHsKICAgICAgICAgICAgbGwgc3VtID0gMDsKICAgICAgICAgICAgRk9SKGksIGV2ZW50LmwsIGV2ZW50LnIpIHN1bSArPSBjbnRbYVtpXV07CiAgICAgICAgICAgIGFuc1tldmVudC5pZF0gKz0gc3VtICogZXZlbnQuc2lnbjsKICAgICAgICB9CiAgICB9CgogICAgTCA9IDEsIFIgPSAwOwogICAgRk9SKGksIDEsIHEpIHsKICAgICAgICBpbnQgbCA9IFFbaV0ubCwgciA9IFFbaV0ucjsKICAgICAgICBpZiAoUiA8IHIpIGFuc1tRW2ldLmlkXSArPSBwcmVmW3JdIC0gcHJlZltSXSwgUiA9IHI7CiAgICAgICAgaWYgKFIgPiByKSBhbnNbUVtpXS5pZF0gLT0gcHJlZltSXSAtIHByZWZbcl0sIFIgPSByOwogICAgICAgIGlmIChMID4gbCkgYW5zW1FbaV0uaWRdIC09IHByZWZbTCAtIDFdIC0gcHJlZltsIC0gMV0sIEwgPSBsOwogICAgICAgIGlmIChMIDwgbCkgYW5zW1FbaV0uaWRdICs9IHByZWZbbCAtIDFdIC0gcHJlZltMIC0gMV0sIEwgPSBsOwogICAgICAgIGFuc1tRW2ldLmlkXSArPSBhbnNbUVtpIC0gMV0uaWRdOyAvLyBjaGFuZ2VzICsgYmVmb3JlCiAgICB9CgogICAgRk9SKGksIDEsIHEpIGNvdXQgPDwgYW5zW2ldIDw8ICdcbic7Cn0KCmludCBtYWluKCkgewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsKICAgIGNpbi50aWUoMCk7IGNvdXQudGllKDApOwogICAgaWYgKGZvcGVuKHRhc2siLmlucCIsICJyIikpIHsKICAgICAgICBmcmVvcGVuKHRhc2siLmlucCIsICJyIiwgc3RkaW4pOwogICAgICAgIGZyZW9wZW4odGFzayIub3V0IiwgInciLCBzdGRvdXQpOwogICAgfQogICAgaW50IHRjID0gMTsKLy8gICAgY2luID4+IHRjOwogICAgd2hpbGUodGMtLSkgewogICAgICAgIGluaXQoKTsKICAgICAgICBwcm9jZXNzKCk7CiAgICB9CiAgICByZXR1cm4gMDsKfQ==