#include<bits/stdc++.h>
using namespace std;
struct f
{
int l,r;
long long dat,tag;
}x[40050];
long long n,m,a[10005],b,c,d,e;
void build(int cur,int l,int r)
{
x[cur].l=l;
x[cur].r=r;
x[cur].tag=0;
if(l==r)
{
x[cur].dat=a[l];
return;
}
int mid=(l+r)/2;
build(cur*2,l,mid);
build(cur*2+1,mid+1,r);
x[cur].dat=x[cur*2].dat+x[cur*2+1].dat;
}
void chuandi(int cur)
{
if(x[cur].tag==0) return;
int mid=(x[cur].l+x[cur].r)/2;
x[2*cur].dat+=x[cur].tag*(mid-x[cur].l+1);
x[2*cur].tag+=x[cur].tag;
x[2*cur+1].dat+=x[cur].tag*(x[cur].r-mid);
x[2*cur+1].tag+=x[cur].tag;
x[cur].tag=0;
}
void add(int cur,int l,int r,int k)
{
if(l<=x[cur].l&&x[cur].r<=r)
{
x[cur].dat+=k*(x[cur].r-x[cur].l+1);
x[cur].tag+=k;
return;
}
int mid=(x[cur].l+x[cur].r)/2;
chuandi(cur);
if(l<=mid)
add(cur*2,l,r,k);
if(r>mid)
add(cur*2+1,l,r,k);
x[cur].dat=x[cur*2].dat+x[cur*2+1].dat;
}
long long qh(int cur,int l,int r)
{
cout<<cur<<endl;
int mid=(x[cur].l+x[cur].r)/2;
if(l<=x[cur].l&&x[cur].r<=r)
return x[cur].dat;
chuandi(cur);
long long sum=0;
if(mid>=l)
sum+=qh(cur*2,l,r);
if(mid<r)
sum+=qh(cur*2+1,l,r);
return sum;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<=m;i++)
{
cin>>b;
if(b==1)
{
cin>>c>>d>>e;
add(1,c,d,e);
}
if(b==2)
{
cin>>c>>d;
cout<<qh(1,c,d)<<endl;
}
}
}