#include<iostream>
using namespace std;
const int N=800050;
struct node{
long long l,r,dat,giao=0;
}t[N];
long long n,f,a[N],pd,tou,wei,bian,zhubian,sum,ab;
void build(long long i,int l,int r){
t[i].l=l;
t[i].r=r;
if(l==r){
t[i].dat=a[l];
return ;
}
int mid=(l+r)/2;
build(i*2,l,mid);
build(i*2+1,mid+1,r);
t[i].dat=t[i*2].dat+t[i*2+1].dat;
}
void jia(long long i){
if(t[i].r<tou||t[i].l>wei) return ;
if(t[i].l>=tou&&t[i].r<=wei){
if(t[i].l==t[i].r){
t[i].dat+=bian;
}else{
t[i].giao+=bian;
}
return ;
}
if(t[i*2].r>=tou)jia(i*2);
if(t[i*2+1].l<=wei)jia(i*2+1);//
t[i].dat=t[i*2].dat+t[i*2+1].dat;
t[i].dat+=t[i*2].giao*(t[i*2].r-t[i*2].l+1)+t[i*2+1].giao*(t[i*2+1].r-t[i*2+1].l+1);
}
void cha(long long i){
if(t[i].r<tou||t[i].l>wei) return ;
if(t[i].l>=tou&&t[i].r<=wei){
sum+=t[i].dat+t[i].giao*(t[i].r-t[i].l+1);
return ;
}
if(t[i].giao!=0){
t[i*2].giao+=t[i].giao;
t[i*2+1].giao+=t[i].giao;
t[i].dat+=t[i].giao*(t[i].r-t[i].l+1);
t[i].giao=0;
}
if(t[i*2].r>=tou)cha(i*2);
if(t[i*2+1].l<=wei)cha(i*2+1);
}
int main(){
cin>>n>>f;
for(int i=1;i<=n;i++){
cin>>a[i];
}
build(1,1,n);
for(int i=1;i<=f;i++){
cin>>pd;
if(pd==1){
cin>>tou>>wei>>bian;
if(tou==1){
ab+=bian;
}
jia(1);
}
if(pd==2){
cin>>bian;
zhubian=zhubian+bian;
}
if(pd==3){
cin>>bian;
zhubian=zhubian-bian;
}
if(pd==4){
cin>>tou>>wei;
sum=0;
cha(1);
if(tou==1){
sum+=zhubian;
}
cout<<sum;
}
if(pd==5){
cout<<a[1]+zhubian+ab;
}
}
return 0;
}