import java.io.*; import java.math.*; import java.security.*; import java.text.*; import java.util.*; import java.util.concurrent.*; import java.util.regex.*; public class Solution { // Complete the xorQueries function below. static long[] xorQueries(int[] a, int m, int p) { // Return an array consisting of the answers of all type-2 queries. ArrayList<Long> ret = new ArrayList<Long>(); for(int i=0;i<m;i++){ String[] nmp = scanner.nextLine().split(" "); int type = Integer.parseInt(nmp[0]); int q1 = Integer.parseInt(nmp[1]); int q2 = Integer.parseInt(nmp[2]); if(type == 1){ a[q1-1]^=q2; } else{ Long P = 0L; Long prevP = 0L; if(q1+p-2<a.length){ for(int j=q1-1;j<q1-1+p;j++){ P^=a[j]; } prevP = P; for(int j=q1;j<q2;j++){ if(j+p-1>=a.length) break; prevP = prevP^a[j-1]^a[j+p-1]; P += prevP; } } ret.add(P); } } return ret.stream().mapToLong(l -> l).toArray(); } private static final Scanner scanner = new Scanner(System.in); public static void main(String[] args) throws IOException { BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(System.getenv("OUTPUT_PATH"))); String[] nmp = scanner.nextLine().split(" "); int n = Integer.parseInt(nmp[0]); int m = Integer.parseInt(nmp[1]); int p = Integer.parseInt(nmp[2]); int[] a = new int[n]; String[] aItems = scanner.nextLine().split(" "); scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?"); for (int i = 0; i < n; i++) { int aItem = Integer.parseInt(aItems[i]); a[i] = aItem; } long[] result = xorQueries(a, m, p); for (int i = 0; i < result.length; i++) { bufferedWriter.write(String.valueOf(result[i])); if (i != result.length - 1) { bufferedWriter.write("\n"); } } bufferedWriter.newLine(); bufferedWriter.close(); scanner.close(); } }