#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 5 ;
int lowbit(int x){
return x & (-x) ;
}
long long a[maxn], c[maxn] ;
int q, n, m ;
void update(int id, long long x){
for(int i = id; i <= n; i += lowbit(i)){
c[i] += x ;
a[i] += x * id ;
}
}
long long getsum(int x){
long long ans = 0 ;
for(int i = x; i; i -= lowbit(i)){
ans += (x + 1) * c[i] - a[i];
}
return ans ;
}
int main(){
scanf("%d %d", &n, &m ) ;
int last = 0 ;
for(int i = 1; i <= n; i++){
scanf("%d", &q ) ;
update(i , q - last) ;
last = q ;
}
long long frist = 0 ;
for(int i = 1; i <= m; i++){
int o ;
scanf("%d", &o) ;
switch(o){
case 1:{
int x, y, k ;
scanf("%d %d %d", &x, &y, &k ) ;
update(x, k) ;
update(y + 1, -k) ;
break;
}
case 2:{
int k ;
scanf("%d", &k ) ;
frist += k ;
break;
}
case 3:{
int k ;
scanf("%d", &k ) ;
frist -= k ;
break;
}
case 4:{
int x, y ;
scanf("%d %d", &x, &y ) ;
if(x == 1) printf("%lld\n", getsum(y) - getsum(x - 1) + frist) ;
else printf("%lld\n", getsum(y) - getsum(x - 1)) ;
break;
}
case 5:{
printf("%lld\n", getsum(1) + frist ) ;
break;
}
}
}
return 0;
}