#include <iostream>
#include <vector>
#include <string>
#include <map>
#include <unordered_map>
#include <set>
#include <unordered_set>

#define ll long long

using namespace std;

int P(vector<int>& a, int idx, int p) {
	if (idx + p > a.size()) {
		return 0;
	}
	int s = a[idx];
	for (int i = idx + 1; i < idx + p; i++) {
		s = s ^ a[i];
	}
	return s;
}

int sum(vector<int>& a, int l, int r, int p) {
	int s = 0;
	for (int i = l; i <= r; ++i) {
		s += P(a, i, p);
	}
	return s;
}

int main() {
	int n, m, p;
	cin >> n >> m >> p;
	vector<int> a(n);
	for (int i = 0; i < n; ++i) {
		cin >> a[i];
	}
	for (int j = 0; j < m; ++j) {
		int q;
		cin >> q;
		if (q == 1) {
			int i, x;
			cin >> i >> x;
			a[i-1] = a[i-1] ^ x;
		}
		else {
			int l, r;
			cin >> l >> r;
			l--;
			r--;
			cout << sum(a, l, r, p) << endl;
		}
	}
	return 0;
}