#include<bits/stdc++.h>
#define long long int
using namespace std;
struct tree{
int l,r,sum=0;
int add=0;
}t[1000001];
int a[1000001];
int n,m;
void pushup(int u)
{
int tmp=t[u<<1].sum+t[u<<1|1].sum;
t[u].sum=tmp;
}
void pushdown(int u)
{
if(t[u].add)
{
t[u<<1].add+=t[u].add;
t[u<<1].sum+=(t[u<<1].r-t[u<<1].l+1)*t[u].add;
t[u<<1|1].add+=t[u].add;
t[u<<1|1].sum+=(t[u<<1|1].r-t[u<<1|1].l+1)*t[u].add;
t[u].add=0;
}
}
void build(int u,int l,int r)
{
t[u].l=l;t[u].r=r;
if(l==r) t[u].sum=a[l];
else
{
int mid=(l+r)>>1;
build(u<<1,l,mid);
build(u<<1|1,mid+1,r);
pushup(u);
}
}
void modify(int u,int l,int r,int x)
{
if(t[u].l>=l&&t[u].r<=r)
{
t[u].sum+=(t[u].r-t[u].l+1)*x;
t[u].add+=x;
return;
}
else
{
pushdown(u);
int mid=(t[u].l+t[u].r)>>1;
if(l<=mid) modify(u<<1,l,r,x);
if(r>mid) modify(u<<1|1,l,r,x);
pushup(u);
}
}
int query(int u,int l,int r)
{
if(t[u].l>=l&&t[u].r<=r)
return t[u].sum;
pushdown(u);
int mid=(t[u].l+t[u].r)>>1,res=0;
if(l<=mid) res+=query(u<<1,l,r);
if(r>mid) res+=query(u<<1|1,l,r);
return res;
}
signed main()
{
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>a[i];
build(1,1,n);
while(m--)
{
char op;
cin>>op;
if(op=='C')
{
int x,y,z;
cin>>x>>y>>z;
modify(1,x,y,z);
}
else
{
int x,y;
cin>>x>>y;
cout<<query(1,x,y)<<endl;
}
}
return 0;
}