第一行有三个整数n,m,p,c,所有整数含义见问题描述。接下来一行n个整数,表示a数组的初始值。接下来m行,每行三个整数,其中第一个整数表示了操作的类型。如果是0的话,表示这是一个修改操作,操作的参数为l,r。如果是1的话,表示这是一个询问操作,操作的参数为l,r。1 ≤ n ≤ 50000, 1 ≤ m ≤ 50000, 1 ≤ p ≤ 100000000, 0 < c < p, 0 ≤ ai < p
对于每个询问操作,输出一行,包括一个整数表示答案mod p的值。
对于0%的测试点,和样例一模一样;
对于另外10%的测试点,没有修改;
对于另外20%的测试点,每次修改操作只会修改一个位置(也就是
),并且每个位置至多被修改一次;
• 对于另外10%的测试点,
;
对于另外 10%的测试点,
;
对于另外10%的测试点,
;
对于另外20%的测试点,
;
对于100%的测试点,
。