#include <iostream>
using namespace std;
const long long N = 1e5 + 10;
long long arr[N], n, m;
struct Tree {
long long l, r, sum, lan;
} tree[N * 4];
void built(long long i, long long l, long long r) {
tree[i].l = l;
tree[i].r = r;
tree[i].lan = 0;
if (l == r) {
tree[i].sum = arr[l];
return;
}
long long mid = (l + r) >> 1;
built(i * 2, l, mid);
built(i * 2 + 1, mid + 1, r);
tree[i].sum = tree[i * 2].sum + tree[i * 2 + 1].sum;
}
void push_down(long long i) {
if (tree[i].lan) {
tree[i * 2].sum += (tree[i * 2].r - tree[i * 2].l + 1) * tree[i].lan;
tree[i * 2 + 1].sum += (tree[i * 2 + 1].r - tree[i * 2 + 1].l + 1) *tree[i].lan;
tree[i * 2].lan += tree[i].lan;
tree[i * 2 + 1].lan += tree[i].lan;
tree[i].lan = 0;
}
}
void add(long long i, long long j, long long k, long long l) {
if (j <= tree[i].l && tree[i].r <= k) {
tree[i].sum += (tree[i].r - tree[i].l + 1) * l;
tree[i].lan += l;
return;
}
long long mid = (tree[i].l + tree[i].r) >> 1;
push_down(i);
if (j <= mid) add(i * 2, j, k, l);
if (k > mid) add(i * 2 + 1, j, k, l);
tree[i].sum = tree[i * 2].sum + tree[i * 2 + 1].sum;
}
long long get_sum(long long i, long long l, long long r) {
long long sum = 0;
if (tree[i].l >= l && r >= tree[i].r) {
return tree[i].sum;
}
push_down(i);
if (tree[i * 2].r >= l) {
sum += get_sum(i * 2, l, r);
}
if (tree[i * 2 + 1].l <= r) {
sum += get_sum(i * 2 + 1, l, r);
}
return sum;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> n >> m;
for (long long i = 1; i <= n; i++) cin >> arr[i];
built(1, 1, n);
for (long long i = 1; i <= m; i++) {
char flag;
long long a, b, c;
cin >> flag >> a >> b;
if (flag == 'C') {
cin >> c;
add(1, a, b, c);
} else {
cout << get_sum(1, a, b) << endl;
}
}
return 0;
}