#include<bits/stdc++.h>
#define N 100010
using namespace std;
int n,q,m;
int a[N],t[N<<2],d1[N<<2],d2[N<<2];
int push_up(int a,int b){
return 1ll*(a+b)%m;
}
void build(int p,int l,int r){
if(l==r) {
t[p]=a[l];
d1[p]=1;
d2[p]=0;
}
else{
int mid = (l+r)>>1;
build(p<<1,l,mid);
build(p<<1|1,mid+1,r);
t[p] = push_up(t[p<<1],t[p<<1|1]);
d1[p]=1;
d2[p]=0;
}
return ;
}
void push_down(int p,int l,int r){
t[p] = (t[p]*d1[p]+d2[p]*(r-l+1))%m;
d2[p<<1]=(1ll*d2[p<<1]*d1[p]+d2[p])%m,d1[p<<1] = (1ll*d1[p<<1]*d1[p])%m;
d2[p<<1|1]=(1ll*d2[p<<1|1]*d1[p]+d2[p])%m,d1[p<<1|1] =(1ll*d1[p<<1|1] *d1[p])%m;
d1[p]=1,d2[p]=0;
return;
}
void chg1(int p,int l,int r,int x,int y,int k){
push_down(p,l,r);
if(l==x&&r==y){
d1[p] = (d1[p]*k)%m;
d2[p] = (d2[p]*k)%m;
push_down(p,l,r);
}
else{
int mid = (l+r) >> 1;
if(y<=mid) {
chg1(p<<1,l,mid,x,y,k);
push_down(p<<1|1,mid+1,r);
}
else if(x>=mid+1) {
chg1(p<<1|1,mid+1,r,x,y,k);
push_down(p<<1,l,mid);
}
else{
chg1(p<<1,l,mid,x,mid,k);
chg1(p<<1|1,mid+1,r,mid+1,y,k) ;
}
t[p] = push_up(t[p<<1],t[p<<1|1]);
}
return;
}
void chg2(int p,int l,int r,int x,int y,int k){
push_down(p,l,r);
if(l==x&&r==y){
d2[p] = (d2[p]+k)%m;
push_down(p,l,r);
}
else{
int mid = (l+r) >> 1;
if(y<=mid) {
chg2(p<<1,l,mid,x,y,k);
push_down(p<<1|1,mid+1,r);
}
else if(x>=mid+1) {
chg2(p<<1|1,mid+1,r,x,y,k);
push_down(p<<1,l,mid);
}
else{
chg2(p<<1,l,mid,x,mid,k);
chg2(p<<1|1,mid+1,r,mid+1,y,k) ;
}
t[p] = push_up(t[p<<1],t[p<<1|1]);
}
return;
}
int query(int p,int l,int r,int x,int y){
push_down(p,l,r);
if(l==x&&r==y){
return t[p]%m;
}
else{
int mid = (l+r)>>1;
if(y<=mid) return query(p<<1,l,mid,x,y);
else if(x>=mid+1) return query(p<<1|1,mid+1,r,x,y);
else{
return (query(p<<1,l,mid,x,mid)+query(p<<1|1,mid+1,r,mid+1,y))%m;
}
}
}
int main()
{
cin >> n >> q >> m;
for(int i=1;i<=n;i++) cin >> a[i];
build(1,1,n);
for(int i=1;i<=q;i++){
int op;
cin >> op;
if(op==1) {
int x,y,k;
cin >> x >> y >> k;
chg1(1,1,n,x,y,k);
}
if(op==2){
int x,y,k;
cin >> x >> y >> k;
chg2(1,1,n,x,y,k);
}
if(op==3){
int x,y;
cin >> x >> y;
cout << query(1,1,n,x,y) << endl;
}
}
return 0;
}
https://www.luogu.com.cn/record/148463956