import java.util.Arrays;
import java.util.Scanner;


public class XorryQueries {

	public static Scanner scanner = new Scanner(System.in);
	public static void main(String[] args) {
		int n = scanner.nextInt();
		int m = scanner.nextInt();
		int p = scanner.nextInt();
		int[] a = new int[n];
		for(int i=0; i<n; i++) {
			a[i] = scanner.nextInt();
		}
//		System.out.println("p3=" + P(3, p, a));
		while(m-- > 0) {
			
			int type = scanner.nextInt();
			
			if(type == 1) {
				int i = scanner.nextInt() - 1;
				int x = scanner.nextInt();
				a[i] = a[i] ^ x;
			} else {
				int l = scanner.nextInt();
				int r = scanner.nextInt();
				int result = P(l, p, a);
				for(int i=l+1; i<=r; i++) {
					int pn = P(i, p, a);
//					System.out.println("p" + i + "=" + pn);
					result = result + pn;
				}
				System.out.println(result);
			}
//			System.out.println(Arrays.toString(a));
		}
	}
	
	public static int P(int i, int p, int[] a) {
		if(i+p-1>a.length)
			return 0;
		
		int returnVal = a[i - 1];
		for(int idx=i + 1; idx<=i+p-1; idx++) {
			returnVal = returnVal ^ a[idx - 1];
		}
		return returnVal;
	}

}