#include<bits/stdc++.h>
using namespace std;
#define int long long
#define mid ((l+r)/2)
int mod,n,q,a[1000100],ta[1000100],tc[1000100],o[500100],t1,t2,t3,t4;
void push_down_mod(int k,int l,int r)
{
a[k]%=mod;
a[k*2]%=mod;
a[k*2+1]%=mod;
tc[k*2]%=mod;
tc[k*2+1]%=mod;
ta[k*2]%=mod;
ta[k*2+1]%=mod;
}
void push_down_chen(int k,int l,int r)
{
if(l!=r)
{
a[k*2]*=tc[k];
a[k*2+1]*=tc[k];
tc[k*2]*=tc[k];
tc[k*2+1]*=tc[k];
ta[k*2]*=tc[k];
ta[k*2+1]*=tc[k];
}
tc[k]=1;
push_down_mod(k,l,r);
}
void push_down_add(int k,int l,int r)
{
if(l!=r)
{
a[k*2]=a[k*2]+(mid-l+1)*ta[k];
a[k*2+1]+=(r-mid)*ta[k];
ta[k*2]+=ta[k];
ta[k*2+1]+=ta[k];
}
ta[k]=0;
push_down_mod(k,l,r);
}
void push_down(int k,int l,int r)
{
push_down_add(k,l,r);
push_down_chen(k,l,r);
push_down_mod(k,l,r);
}
void push_up(int k)
{
a[k]=(a[k*2+1]+a[k*2])%mod;
}
void build(int k,int l,int r)
{
tc[k]=1;
if(l==r)
{
a[k]=o[l]%mod;
return;
}
build(k*2,l,mid);
build(k*2+1,mid+1,r);
push_up(k);
}
void add(int k,int l,int r,int ll,int rr,int x)
{
if(l>rr||r<ll)return;
if(r<l)return;
if(l>=ll&&r<=rr)
{
push_down_chen(k,l,r);
push_down_mod(k,l,r);
a[k]=(a[k]+x*(r-l+1))%mod;
ta[k]=(ta[k]+x)%mod;
return;
}
push_down(k,l,r);
add(k*2,l,mid,ll,rr,x);
add(k*2+1,mid+1,r,ll,rr,x);
push_up(k);
}
void chen(int k,int l,int r,int ll,int rr,int x)
{
if(l>rr||r<ll)return;
if(r<l)return;
if(l>=ll&&r<=rr)
{
push_down_add(k,l,r);
push_down_mod(k,l,r);
a[k]=a[k]*x%mod;
tc[k]=tc[k]*x%mod;
return;
}
push_down(k,l,r);
chen(k*2,l,mid,ll,rr,x);
chen(k*2+1,mid+1,r,ll,rr,x);
push_up(k);
}
int sum(int k,int l,int r,int ll,int rr)
{
if(r<l)return 0;
if(l>=ll&&r<=rr)
{
return a[k]%mod;
}
if(l>rr||r<ll)return 0;
push_down(k,l,r);
return (sum(k*2,l,mid,ll,rr)+sum(k*2+1,mid+1,r,ll,rr))%mod;
}
signed main()
{
scanf("%lld%lld%lld",&n,&q,&mod);
for(int i=1;i<=n;++i)
{
scanf("%lld",&o[i]);
o[i]%=mod;
}
for(int i=1;i<=n*4;++i)
{
tc[i]=1;
}
build(1,1,n);
for(int i=1;i<=q;++i)
{
scanf("%lld",&t1);
if(t1==1)
{
scanf("%lld%lld%lld",&t2,&t3,&t4);
chen(1,1,n,t2,t3,t4%mod);
}
if(t1==2)
{
scanf("%lld%lld%lld",&t2,&t3,&t4);
add(1,1,n,t2,t3,t4%mod);
}
if(t1==3)
{
scanf("%lld%lld",&t2,&t3);
printf("%lld\n",sum(1,1,n,t2,t3)%mod);
}
}
return 0;
}