#include<bits/stdc++.h>
#define N 10005
#define int long long
using namespace std;
struct node{
int l,r,sum,tg=0;
}seg[4*N];
int n,m;
int in[N];
void push_down(int p){
seg[2*p].tg+=seg[p].tg;
seg[2*p+1].tg+=seg[p].tg;
seg[2*p].sum+=(seg[2*p].r-seg[2*p].l+1)*seg[2*p].tg;
seg[2*p+1].sum+=(seg[2*p+1].r-seg[2*p+1].l+1)*seg[2*p+1].tg;
seg[p].tg=0;
}
void push_up(int p){
seg[p].sum=seg[2*p].sum+seg[2*p+1].sum;
}
void building(int p,int l,int r){
seg[p].l=l;
seg[p].r=r;
if(l==r){
seg[p].sum=in[l];
return;
}
int mid=(l+r)/2;
building(2*p,l,mid);
building(2*p+1,mid+1,r);
push_up(p);
}
void insert(int p,int l,int r,int k){
if(l>seg[p].r or seg[p].l>r)return ;
if(r>=seg[p].r and seg[p].l>=l){
seg[p].tg+=k;
seg[p].sum+=(seg[p].r-seg[p].l+1)*k;
return;
}
push_down(p);
insert(2*p,l,r,k);
insert(2*p+1,l,r,k);
push_up(p);
}
int qurey(int p,int l,int r){
if(l>seg[p].r or seg[p].l>r)return 0;
if(r>=seg[p].r and seg[p].l>=l){
return seg[p].sum;
}
push_down(p);
return qurey(2*p,l,r)+qurey(2*p+1,l,r);
}
signed main() {
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>in[i];
}
building(1,1,n);
for(int i=1;i<=m;i++){
int leixin,x,y,k;
cin>>leixin;
cin>>x>>y;
if(leixin==1){
cin>>k;
insert(1,x,y,k);
for(int i=1;i<4*n;i++){
cout<<"l->r: "<<seg[i].l<<" -> "<<seg[i].r<<" sum:"<<seg[i].sum<<endl;
}
cout<<endl;
}
else{
for(int i=1;i<4*n;i++){
cout<<"l->r: "<<seg[i].l<<" -> "<<seg[i].r<<" sum:"<<seg[i].sum<<endl;
}
cout<<endl;
}
}
return 0;
}