#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxn=1000000;
int a[maxn],pos[maxn],l[maxn],r[maxn],sum[maxn],x,y,k,o,lazy[maxn],n,m,o1,o2;
void build(int n){
int num=sqrt(n);
if(n%num)num++;
for(int i=1;i<=num;i++){
l[i]=(i-1)*num+1;
r[i]=i*num;
}
r[num]=n;
for(int i=1;i<=num;i++){
for(int j=l[i];j<=r[i];j++){
pos[j]=i;
sum[i]+=a[j];
}
}
}
void change(int p,int q,int v){
int x=pos[p],y=pos[q];
if(x==y){
for(int i=p;i<=q;i++)
a[i]+=v;
sum[x]+=v*(q-p+1);
}
else{
for(int i=x+1;i<=y-1;i++){
lazy[i]+=v;
}
for(int i=p;i<=r[x];i++)
a[i]+=v;
sum[x]+=v*(r[x]-p+1);
for(int i=l[y];i<=q;i++)
a[i]+=v;
sum[y]+=v*(q-l[y]+1);
}
}
int query(int p,int q)
{
int x=pos[p],y=pos[q];
int ans=0;
if(x==y){
for(int i=p;i<=q;i++){
ans+=a[i];
ans+=lazy[x]*(q-p+1);
}
}
else {
for(int i=x+1;i<=y-1;i++){
ans+=sum[i]+lazy[i]*(r[i]-l[i]+1);
}
for(int i=p;i<=r[x];i++)
ans+=a[i];
ans+=lazy[x]*(r[x]-p+1);
for(int i=l[y];i<=q;i++)
ans+=a[i];
ans+=lazy[y]*(q-l[y]+1);
}
return ans;
}
signed main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
build(n);
while(m--){
cin>>o;
if(o==1){
cin>>o1>>o2>>k;
change(o1,o2,k);
}
if(o==2){
cin>>k;
a[1]+=k;
sum[pos[1]]+=k;
}
if(o==3){
cin>>k;
a[1]-=k;
sum[pos[1]]-=k;
}
if(o==4){
cin>>o1>>o2;
cout<<query(o1,o2)<<endl;
}
if(o==5){
cout<<a[1]+lazy[pos[1]]<<endl;
}
}
return 0;
}