#include<bits/stdc++.h>
using namespace std;
int block;
int b[200010];
unsigned long long lazy[200010];
unsigned long long a[200010],c[200010];
int l[200010],r[200010];
unsigned long long ans;
int n,f;
void build()
{
block=sqrt(n);
for(int i=1;i<=n;i++)
{
b[i]=(i-1)/block+1;
}
for(int i=1;i<=n;i++)
{
c[b[i]]+=a[i];
if(b[i]>b[i-1])
{
l[b[i]]=i;
r[b[i-1]]=i-1;
}
}
}
unsigned long long query(int p,int q)
{
ans=0;
for(int i=p;i<=r[b[p]];i++)
{
ans+=a[i]+lazy[b[i]];
}
for(int i=b[p]+1;i<=b[q]-1;i++)
{
ans+=c[i]+lazy[i]*block;
}
for(int i=l[b[q]];i<=q;i++)
{
ans+=a[i]+lazy[b[i]];
}
return ans;
}
void update(int p,int q,int k)
{
for(int i=p;i<=r[b[p]];i++)
{
if(p==l[b[p]]&&l[b[p]+1]!=0)
{
break;
}
a[i]+=k;
c[b[i]]+=k;
}
for(int i=((p==l[b[p]])?b[p]:b[p]+1);i<=((q==r[b[q]])?b[q]:b[q]-1);i++)
{
lazy[i]+=k;
}
for(int i=l[b[q]];i<=q;i++)
{
if(q==r[b[q]])
{
break;
}
a[i]+=k;
c[b[i]]+=k;
}
}
int main()
{
scanf("%d%d",&n,&f);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
build();
for(int i=1;i<=f;i++)
{
int a1,b1,c1,d1;
scanf("%d",&a1);
if(a1==1)
{
scanf("%d%d%d",&b1,&c1,&d1);
update(b1,c1,d1);
}
if(a1==2)
{
scanf("%d",&b1);
a[1]+=b1;
}
if(a1==3)
{
scanf("%d",&b1);
a[1]-=b1;
}
if(a1==4)
{
scanf("%d%d",&b1,&c1);
printf("%d\n",query(b1,c1));
}
if(a1==5)
{
printf("%d\n",a[1]+lazy[1]);
}
printf("\n");
for(int i=1;i<=n;i++)
{
printf("%d ",a[i]);
}
printf("\n");
}
return 0;
}