/*
ID:billat11
LANG:C
TASK:namenum
*/
#include<iostream>
#include<cstdio>
#include<cstdarg>
#include<stdlib.h>
#include<cstring>
#include<cmath>
using namespace std;
const int N=50005;
struct Node
{
int l;
int r;
int num;
}aNode[4*N];
int data[N];
void build(int l,int r,int n)
{
int mid=(l+r)>>1;
if(l==r)
{
aNode[n].l=l;
aNode[n].r=r;
aNode[n].num=data[l];
}
else
{
aNode[n].l=l;
aNode[n].r=r;
build(l,mid,2*n);
build(mid+1,r,2*n+1);
aNode[n].num=aNode[2*n].num+aNode[2*n+1].num;
}
}
int query(int l,int r,int n)
{
int mid=(aNode[n].l+aNode[n].r)>>1;
if((aNode[n].l==l)&&(aNode[n].r==r))
return aNode[n].num;
else
{
if(r<=mid)
return(query(l,r,2*n));
else if(l>mid)
return query(l,r,2*n+1);
else
return (query(l,mid,2*n)+query(mid+1,r,2*n+1));
}
}
void add(int nid,int d,int n)
{
int mid=(aNode[n].l+aNode[n].r)>>1;
if((aNode[n].l==nid)&&(aNode[n].r==nid))
{
aNode[n].num+=d;
int newn=(n>>1);
while(newn>=1)
{
aNode[newn].num=aNode[2*newn].num+aNode[2*newn+1].num;
newn=newn>>1;
}
}
else
{
if(nid<=mid)
add(nid,d,2*n);
else if(nid>mid)
add(nid,d,2*n+1);
}
}
void sub(int nid,int d,int n)
{
int mid=(aNode[n].l+aNode[n].r)>>1;
if((aNode[n].l==nid)&&(aNode[n].r==nid))
{
aNode[n].num-=d;
int newn=(n>>1);
while(newn>=1)
{
aNode[newn].num=aNode[2*newn].num+aNode[2*newn+1].num;
newn=newn>>1;
}
}
else
{
if(nid<=mid)
sub(nid,d,2*n);
else if(nid>mid)
sub(nid,d,2*n+1);
}
}
int main()
{
int t,id=1,n;
scanf("%d",&t);
char cmd[20];
while(id<=t)
{
int a,b;
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&data[i]);
build(1,n,1);
printf("Case %d:\n",id);
while(1)
{
scanf("%s",cmd);
if(cmd[0]=='Q')
{
scanf("%d%d",&a,&b);
int ans=query(a,b,1);
printf("%d\n",ans);
}
else if(cmd[0]=='A')
{
scanf("%d%d",&a,&b);
add(a,b,1);
}
else if(cmd[0]=='S')
{
scanf("%d%d",&a,&b);
sub(a,b,1);
}
else if(cmd[0]=='E')
break;
}
id++;
}
//system("pause");
return 0;
}