#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int a[N],tree[4*N],add[4*N],mul[4*N];
int n,q,m;
void build(int l,int r,int k){
if(l==r){
tree[k]=a[l];
return;
}
int mid=l+r>>1;
build(l,mid,2*k);
build(mid+1,r,2*k+1);
tree[k]=(tree[k*2]+tree[k*2+1])%m;
}
void Achange(int l,int r,int k,int v){
tree[k]+=v*(r-l+1)%m;
add[k]+=v%m;
}
void Adown(int l,int r,int k){
if(add[k]!=0){
int mid=l+r>>1;
Achange(l,mid,2*k,add[k]);
Achange(mid+1,r,2*k+1,add[k]);
add[k]=0;
}
}
void Mchange(int l,int r,int k,int v){
tree[k]=tree[k]*v%m;
mul[k]=mul[k]*v%m;
add[k]=add[k]*v%m;
}
void Mdown(int l,int r,int k){
if(mul[k]!=0){
int mid=l+r>>1;
Mchange(l,mid,2*k,add[k]);
Mchange(mid+1,r,2*k+1,add[k]);
mul[k]=0;
}
}
void Aupdate(int l,int r,int k,int x,int y,int v){
if(x<=l && y>=r){
Achange(l,r,k,v);
return;
}
int mid=l+r>>1;
Adown(l,r,k);
if(x<=mid) Aupdate(l,mid,2*k,x,y,v);
if(y>mid) Aupdate(mid+1,r,2*k+1,x,y,v);
tree[k]=(tree[2*k]+tree[2*k+1])%m;
}
void Mupdate(int l,int r,int k,int x,int y,int v){
if(x<=l && y>=r){
Mchange(l,r,k,v);
return;
}
int mid=l+r>>1;
Mdown(l,r,k);
if(x<=mid) Mupdate(l,mid,2*k,x,y,v);
if(y>mid) Mupdate(mid+1,r,2*k+1,x,y,v);
tree[k]=(tree[2*k]+tree[2*k+1])%m;
}
int Aquery(int l,int r,int k,int x,int y){
if(x<=l && y>=r){
return tree[k];
}
int mid=l+r>>1;
Adown(l,r,k);
int res=0;
if(x<=mid) res=(res+Aquery(l,mid,2*k,x,y))%m;
if(y>mid) res=(res+Aquery(mid+1,r,2*k+1,x,y))%m;
return res%m;
}
int Mquery(int l,int r,int k,int x,int y){
if(x<=l && y>=r){
return tree[k];
}
int mid=l+r>>1;
Mdown(l,r,k);
int res=0;
if(x<=mid) res=(res+Mquery(l,mid,2*k,x,y))%m;
if(y>mid) res=(res+Mquery(mid+1,r,2*k+1,x,y))%m;
return res%m;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n>>q>>m;
for(int i=1;i<=n;i++) cin>>a[i];
build(1,n,1);
for(int i=1;i<=n;i++) mul[i]=1;
while(q--){
int p;
int x,y,k;
cin>>p;
if(p==1){
cin>>x>>y>>k;
Mupdate(1,n,1,x,y,k);
}else if(p==2){
cin>>x>>y>>k;
Aupdate(1,n,1,x,y,k);
}else if(p==3){
cin>>x>>y;
cout<<(Aquery(1,n,1,x,y)+Mquery(1,n,1,x,y))%m<<endl;
}
}
return 0;
}