#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e4 + 10;
int d[maxn];
int a[maxn];
int m, n;
void build(int l, int r, int p)
{
if(l == r)
{
d[p] = a[l];
return ;
}
int mid = l + (r - l) / 2;
build(l, mid, p * 2);
build(mid + 1, r, p * 2 + 1);
d[p] = d[p * 2] + d[p * 2 + 1];
}
int b[maxn] = {0};
void update(int l, int r, int s, int t, int c, int p)
{
if(l <= s && t <= r)
{
b[p] += c;
d[p] += c * (t - s + 1);
return ;
}
int mid = s + (t - s) / 2;
if(b[p] != 0 && s != t)
{
b[p * 2] += b[p];
b[p * 2 + 1] += b[p];
d[p * 2] += b[p] * (mid - s + 1);
d[p * 2 + 1] += b[p] * (t - mid);
b[p] = 0;
}
if(l <= mid)
update(l, r, s, mid, c, p * 2);
if(r > mid)
update(l, r, mid + 1, r, c, p * 2 + 1);
d[p] = d[p * 2] + d[p * 2 + 1];
}
int sum = 0;
int ask(int l, int r, int s, int t, int p)
{
if(l <= s && t <= r)
return d[p];
int mid = s + (t - s) / 2;
if(b[p] != 0)
{
b[p * 2] = b[p];
b[p * 2 + 1] = b[p];
d[p * 2] += b[p] * (mid - s + 1);
d[p * 2 + 1] += b[p] * (t-mid);
b[p] = 0;
}
if(l <= mid)
sum += ask(l, r, s, mid, p * 2);
if(r > mid)
sum += ask(l, r, mid + 1, r, p * 2 + 1);
return sum;
}
int main()
{
ios :: sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> n >> m;
for(int i = 1; i <= n; i++)
cin >> a[i];
build(1, n, 1);
while(m--)
{
int op;
cin >> op;
if(op == 1)
{
int x, y, k;
cin >> x >> y >> k;
update(x, y, 1, n, k, 1);
}
if(op == 2)
{
int x, y;
cin >> x >> y;
cout << ask(x, y, 1, n, 1) << "\n";
sum = 0;
}
}
return 0;
}