#include<bits/stdc++.h>
using namespace std;
int a[2000010];
int n,m;
int len;
long long ans[2000010];
long long lazy[2000010];
int get(int x)
{
return x/len;
}
int main()
{
cin>>n>>m;
len=sqrt(n);
for(int i=1;i<=n;i++)
{
cin>>a[i];
ans[get(i)]+=a[i];
}
for(int apple=1;apple<=m;apple++)
{
int mode;
cin>>mode;
if(mode==1)
{
int l,r,k;
cin>>l>>r>>k;
if(get(l)==get(r))
{
for(int i=l;i<=r;i++)
{
a[i]+=k;
}
}
else
{
int lx=l;
int rx=r;
while(get(lx)==get(l))
{
a[lx]+=k;
ans[get(lx)]+=k;
lx+=1;
}
while(get(rx)==get(r))
{
a[rx]+=k;
ans[get(rx)]+=k;
rx-=1;
}
for(int i=get(lx);i<=get(rx);i++)
{
ans[i]+=k*len;
lazy[i]+=k;
}
}
}
if(mode==2)
{
int k;
cin>>k;
a[1]+=k;
ans[get(1)]+=k;
}
if(mode==3)
{
int k;
cin>>k;
a[1]-=k;
ans[get(1)]-=k;
}
if(mode==4)
{
int l,r;
cin>>l>>r;
long long res=0;
if(get(l)==get(r))
{
for(int i=l;i<=r;i++)
{
res+=(a[i]+lazy[get(i)]);
}
}
else
{
int lx=l;
int rx=r;
while(get(lx)==get(l))
{
res+=(a[lx]+lazy[get(lx)]);
lx+=1;
}
while(get(rx)==get(r))
{
res+=(a[rx]+lazy[get(rx)]);
rx-=1;
}
for(int i=get(lx);i<=get(rx);i++)
{
res+=ans[i];
}
}
cout<<res<<endl;
}
if(mode==5)
{
cout<<a[1]+lazy[get(1)]<<endl;
}
}
return 0;
}