#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n, q, m, a[100005], len, b[2005], s[2005], id[100005];
inline void add(ll l, ll r, ll k) {
ll sid = id[l], eid = id[r];
if (sid == eid) {
for (ll i = l; i <= r; ++i) {
a[i] += k;
s[sid] += k;
a[i] %= m;
s[sid] %= m;
}
return;
}
for (ll i = l; id[i] == sid; ++i) {
a[i] += k;
s[sid] += k;
a[i] %= m;
s[sid] %= m;
}
for (ll i = r; id[i] == eid; --i) {
a[i] += k;
s[eid] += k;
a[i] %= m;
s[eid] %= m;
}
for (ll i = sid + 1; i < eid; ++i) {
b[i] += k;
s[i] += len * k;
b[i] %= m;
s[i] %= m;
}
}
inline void multi(ll l, ll r, ll k) {
ll sid = id[l], eid = id[r];
if (sid == eid) {
for (ll i = l; i <= r; ++i) {
a[i] *= k;
s[sid] += a[i] * (k - 1);
a[i] %= m;
s[sid] %= m;
}
return;
}
for (ll i = l; id[i] == sid; ++i) {
a[i] *= k;
s[sid] += a[i] * (k - 1);
a[i] %= m;
s[sid] %= m;
}
for (ll i = r; id[i] == eid; --i) {
a[i] *= k;
s[eid] += a[i] * (k - 1);
a[i] %= m;
s[eid] %= m;
}
for (ll i = sid + 1; i < eid; ++i) {
b[i] += s[i] * (k - 1);
s[i] *= k;
b[i] %= m;
s[i] %= m;
}
}
inline ll query(ll l, ll r) {
ll sid = id[l], eid = id[r], ans = 0;
if (sid == eid) {
for (ll i = l; i <= r; ++i) {
ans += a[i] + b[sid];
ans %= m;
}
return ans;
}
for (ll i = l; id[i] == sid; i++) {
ans += a[i] + b[sid];
ans %= m;
}
for (ll i = r; id[i] == eid; --i) {
ans += a[i] + b[eid];
ans %= m;
}
for (ll i = sid + 1; i < eid; i++) {
ans += s[i];
ans %= m;
}
return ans % m;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> n >> q >> m;
len = floor(sqrt(n));
for (ll i = 1; i <= n; ++i) {
cin >> a[i];
id[i] = (i - 1) / len + 1;
s[id[i]] += a[i];
}
for (ll i = 0; i < q; ++i) {
ll op, l, r, k;
cin >> op;
if (op == 1) {
cin >> l >> r >> k;
multi(l, r, k % m);
} else if (op == 2) {
cin >> l >> r >> k;
add(l, r, k);
} else {
cin >> l >> r;
cout << query(l, r) << endl;
}
}
return 0;
}
过了样例,但提交0分。