#include <bits/stdc++.h> using namespace std; const int mxN=1e5, sqN=300; int n, m, p, n2, bs, v[mxN+1], sum[(mxN-1)/sqN+1][17], flp[(mxN-1)/sqN+1]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> n >> m >> p; n2=n-p+1, bs=(n2-1)/sqN+1; for(int i=0; i<n; ++i) cin >> v[i]; for(int i=n-1; i>=0; --i) v[i]^=v[i+1]; for(int i=0; i<n2; ++i) { v[i]^=v[i+p];//, cout << v[i] << endl; for(int j=0; j<17; ++j) sum[i/sqN][j]+=v[i]>>j&1; } while(m--) { int qt, a, b; cin >> qt >> a >> b, --a; if(qt==1) { int s=max(a-p+1, 0); a=min(n2-1, a); while(s%sqN&&s<=a) { for(int j=0; j<17; ++j) sum[s/sqN][j]-=v[s]>>j&1; v[s]^=b; for(int j=0; j<17; ++j) sum[s/sqN][j]+=v[s]>>j&1; ++s; } while(s<n2&&min(s+sqN, n2)-1<=a) { flp[s/sqN]^=b; s+=sqN; } while(s<=a) { for(int j=0; j<17; ++j) sum[s/sqN][j]-=v[s]>>j&1; v[s]^=b; for(int j=0; j<17; ++j) sum[s/sqN][j]+=v[s]>>j&1; ++s; } } else { long long ans=0; b=min(b, n2)-1; while(a%sqN&&a<=b) { ans+=v[a]^flp[a/sqN]; ++a; } while(a<n2&&min(a+sqN, n2)-1<=b) { for(int j=0; j<17; ++j) { int s=sum[a/sqN][j]; if(flp[a/sqN]>>j&1) s=min(sqN, n2-a)-s; ans+=s<<j; } a+=sqN; } while(a<=b) { ans+=v[a]^flp[a/sqN]; ++a; } cout << ans << "\n"; } } }