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();
    }
}