#include<bits/stdc++.h>
#define int long long
#define N 200020
#define M 500
using namespace std;
int n, f;
int pre[N], belong[N], tot, block, sum[M], L[M], R[M], tag[M], a[N];
void build(){
block = sqrt(n);
tot = n / block;
if(n%block) tot ++;
for(int i = 1; i <= n; i++)
belong[i] = (i - 1) / block + 1,
pre[i] = pre[i - 1] + a[i];
for(int i = 1; i <= tot; i++)
L[i] = (i - 1)*block + 1,
R[i] = i * block,
sum[i] = pre[R[i]] - pre[R[i - 1]];
R[tot] = n;
}
void Update2(int k){
a[1] += k;
sum[1] += k;
}
void Update1(int l, int r, int k){
if(belong[l] == belong[r]){
for (int i = l; i <= r; i++) a[i] += k;
sum[belong[l]] += k*(r - l + 1);
return;
}
for(int i = l; i <= R[belong[l]]; i++){
a[i] += k;
}
sum[belong[l]] += k*(R[belong[l]] - l + 1);
for(int i = L[belong[r]]; i <= r; i++){
a[i] += k;
}
sum[belong[r]] += k*(r - L[belong[r]]+1);
for(int i = belong[l] + 1; i < belong[r]; i++) tag[i] += k, sum[i] += k * block;
}
int query(int l, int r){
int ans = 0;
if(belong[l] == belong[r]){
for (int i = l; i <= r; i++) ans += a[i];
ans += tag[belong[l]] * (r - l + 1);
return ans;
}
for(int i = l; i <= R[belong[l]]; i++){
ans += a[i];
}
ans += tag[belong[l]]*(R[belong[l]] - l + 1);
for(int i = L[belong[r]]; i <= r; i++){
ans += a[i];
}
ans += tag[belong[r]]*(r - L[belong[r]]+1);
for(int i = belong[l] + 1; i < belong[r]; i++) ans += sum[i];
}
signed main(){
scanf("%lld%lld", &n, &f);
for(int i = 1; i <= n; i++) scanf("%lld", &a[i]);
while(f--){
int opt;
scanf("%lld", &opt);
if(opt == 1){
int l, r, k;
scanf("%lld%lld%lld", &l, &r, &k);
Update1(l, r, k);
}
else if(opt == 2){
int k;
scanf("%lld", &k);
Update2(k);
}
else if(opt == 3){
int k;
scanf("%lld", &k);
Update2(-k);
}
else if(opt == 4){
int l, r;
scanf("%lld%lld", &l, &r);
printf("%lld\n", query(l, r));
}
else printf("%lld\n", a[1] + tag[1]);
}
return 0;
}