#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n,m;
ll A[50000000];
ll sump[50000000];
ll len[50000000];
ll lazy[50000000];
void pushup(ll k)
{
sump[k]=sump[k<<1]+sump[k<<1|1];
len[k]=len[k<<1]+len[k<<1|1];
}
void build(ll k,ll l,ll r)
{
if(l==r)
{
sump[k]=A[l];
len[k]=1;
return ;
}
ll mid=(l+r)/2;
build(k<<1,l,mid);
build(k<<1|1,mid+1,r);
pushup(k);
}
void As(ll k,ll x)
{
sump[k]+=x*len[k];
lazy[k]+=x;
}
void pushdown(ll k)
{
if(lazy[k])
{
As(k<<1,lazy[k]);
As(k<<1|1,lazy[k]);
lazy[k]=0;
}
}
void change(ll k,ll l,ll r,ll q,ll w,ll T)
{
if(l>w||r<q)
{
return ;
}
if(l==q&&r==w)
{
As(k,T);
return ;
}
pushdown(k);
ll mid=(l+r)/2;
change(k<<1,l,mid,q,w,T);
change(k<<1|1,mid+1,r,q,w,T);
pushup(k);
}
ll find(ll k,ll l,ll r,ll q,ll w)
{
if(l>w||r<q)
{
return 0;
}
if(l==q&&r==w)
{
return sump[k];
}
pushdown(k);
ll mid=(r+l)/2;
return
find(k<<1,l,mid,q,w)+find(k<<1|1,mid+1,r,q,w);
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
scanf("%lld",&A[i]);
}
build(1,1,n);
while(m--)
{
int p;
scanf("%d",&p);
if(p==1)//qu jian jia
{
int l,r,T;
cin>>l>>r>>T;
change(1,1,n,l,r,T);
}
else if(p==2) // zhu mu jia
{
int T;
cin>>T;
change(1,1,n,1,1,T);
}
else if(p==3)// zhu mu jian;
{
int T;
cin>>T;
change(1,1,n,1,1,-T);
}
else if(p==4)
{
int l,r;
cin>>l>>r;
cout<<find(1,1,n,l,r)<<endl;
}
else
{
cout<<find(1,1,n,1,1)<<endl;
}
}
return 0;
}