using namespace std;
inline long long read()
{
long long x=0;bool flag=1;char ch=getchar();
while(ch>'9'||ch<'0'){if(ch=='-')flag=0;ch=getchar();}
while(ch<='9'&&ch>='0'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}
if(flag)return x;
else return ~(x-1);
}
#define read(c) c=read()
long long a[100050];
int st[105000],ed[105000];
int belong[100050];
int n,f;
long long sum[105000];
long long mark[105000],size[105000];
void change(int l,int r,int k)
{
if(belong[l]==belong[r])
{
for(int i=l;i<=r;i++)
{
a[i]+=k;sum[belong[i]]+=k;
}
}
else
{
for(int i=l;i<=ed[belong[l]];i++)
{
a[i]+=k;sum[belong[i]]+=k;
}
for(int i=st[belong[r]];i<=r;i++)
{
a[i]+=k;sum[belong[i]]+=k;
}
for(int i=belong[l]+1;i<belong[r];i++)
{
mark[i]+=k;
}
}
}
long long inquire(int l,int r)
{
long long ans=0;
if(belong[l]==belong[r])
{
for(int i=l;i<=r;i++)
{
ans+=a[i]+mark[belong[i]];
}
}
else
{
for(int i=l;i<=ed[belong[l]];i++)
{
ans+=a[i]+mark[belong[i]];
}
for(int i=st[belong[r]];i<=r;i++)
{
ans+=a[i]+mark[belong[i]];
}
for(int i=belong[l]+1;i<belong[r];i++)
{
ans+=sum[i]+size[i]*mark[i];
}
}
return ans;
}
int main()
{
scanf("%d%d",&n,&f);
for(int i=1;i<=n;i++)
{
read(a[i]);
}
int sq=sqrt(n);
for(int i=1;i<=sq;i++)
{
st[i]=n/sq*(i-1)+1;
ed[i]=n/sq*i;
}
ed[sq]=n;
for(int i=1;i<=sq;i++)
for(int j=st[i];j<=ed[i];j++)
{
belong[j]=i;sum[i]+=a[j];
}
for(int i=1;i<=sq;i++)
{
size[i]=ed[i]-st[i]+1;
}
while(f--)
{
int ch;
read(ch);
if(ch==1)
{
int l,r,k;read(l);read(r);read(k);
change(l,r,k);
}
else if(ch==2)
{
int k;read(k);
change(1,1,k);
}
else if(ch==3)
{
int k;read(k);
change(1,1,-k);
}
else if(ch==4)
{
int l,r;read(l);read(r);
printf("%lld\n",inquire(l,r));
}
else
{
printf("%lld\n",inquire(1,1));
}
}
return 0;
}```