#include <iostream>
#include <cmath>
using namespace std;
const int maxn = 1e5+5;
int n, m, opt1;
int a[maxn];
int belong[maxn];
int siz[maxn];
int sum[maxn];
int delta[maxn];
int ans = 0;
int main() {
cin >> n >> m >> opt1;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
int s = sqrt(n);
for (int i = 1; i <= n; i++) {
belong[i] = (i - 1) / s + 1;
}
for (int i = 1; i <= n; i++) {
sum[belong[i]] += a[i];
siz[belong[i]]++;
}
for (int i = 1; i <= m; i++) {
int opt;
cin >> opt;
if (opt == 2) {
int l, r, v;
cin >> l >> r >> v;
if (belong[l] == belong[r]) {
for (int j = l; j <= r; j++) {
a[j] += v;
sum[belong[j]] += v;
}
} else {
for (int j = l; belong[j] == belong[l]; j++) {
a[j] += v;
sum[belong[j]] += v;
}
for (int j = belong[l] + 1; j < belong[r]; j++) {
delta[j] += v;
sum[j] += siz[j] * v;
}
for (int j = r; belong[j] == belong[r]; j--) {
a[j] += v;
sum[belong[j]] += v;
}
}
} else if (opt == 1) {
int l, r, v;
cin >> l >> r >> v;
if (belong[l] == belong[r]) {
for (int j = l; j <= r; j++) {
a[j] *= v;
sum[belong[j]] *= v;
}
} else {
for (int j = l; belong[j] == belong[l]; j++) {
a[j] *= v;
sum[belong[j]] *= v;
}
for (int j = belong[l] + 1; j < belong[r]; j++) {
delta[j] *= v;
sum[j] *= v * siz[j];
}
for (int j = r; belong[j] == belong[r]; j--) {
a[j] *= v;
sum[belong[j]] *= v;
}
}
} else {
int l, r;
cin >> l >> r;
ans = 0;
if (belong[l] == belong[r]) {
for (int j = l; j <= r; j++) {
ans = (ans + a[j] + delta[belong[j]]) % opt1;
}
} else {
for (int j = l; belong[j] == belong[l]; j++) {
ans = (ans + a[j] + delta[belong[j]]) % opt1;
}
for (int j = belong[l] + 1; j < belong[r]; j++) {
ans = (ans + sum[j] + delta[j] * siz[j]) % opt1;
}
for (int j = r; belong[j] == belong[r]; j--) {
ans = (ans + a[j] + delta[belong[j]]) % opt1;
}
}
cout << ans << endl;
}
}
return 0;
}
样例过了,但WA