#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxn=1e5+5;
#define lowbit(x) (x&-x)
int n,m,c[maxn],a[maxn],q;
void add(int x,int k){
a[x]+=k;
while(x<=n){
c[x]+=k;
x+=lowbit(x);
}
}
void mul(int x,int k){
int t=a[x]*(k-1);
for(int i=x;i<=n;i+=lowbit(i)){
c[i]+=t;
}
a[x]*=k;
}
int getsum(int x) {
int ans = 0;
while (x > 0) {
ans = ans + c[x];
x = x - lowbit(x);
}
return ans;
}
signed main(){
int t;
cin>>n>>m>>q;
for(int i=1;i<=n;i++){
cin>>t;
add(i,t);
}
for(int i=1;i<=m;i++){
int o,x,y,k;
cin>>o;
if(o==2){
cin>>x>>y>>k;
for(int i=x;i<=y;i++){
add(i,k);
}
}
if(o==3){
cin>>x>>y;
cout<<(getsum(y)-getsum(x-1))%q<<endl;
}
if(o==1){
cin>>x>>y>>k;
for(int i=x;i<=y;i++){
mul(i,k);
}
}
}
return 0;
}