#include<stdio.h>
int tree[200005];
void pushup(int id)
{
tree[id]=tree[id<<1]+tree[id<<1|1];
}
void build(int l,int r,int id)
{
if(l==r)
{
scanf("%d",&tree[id]);
return ;
}
int mid=l+r>>1;
build(l,mid,id<<1);
build(mid+1,r,id<<1|1);
pushup(id);
}
void updata(int p,int add,int l,int r,int id)
{
if(l==r)
{
tree[id]+=add;
return ;
}
int mid=l+r>>1;
if(p<=mid)
updata(p,add,l,mid,id<<1);
else
updata(p,add,mid+1,r,id<<1|1);
pushup(id);
}
int query(int L,int R,int l,int r,int id)
{
if(L<=l&&R>=r)
return tree[id];
int ans=0;
int mid=r+l>>1;
if(L<=mid)
ans+=query(L,R,l,mid,id<<1);
if(R>mid)
ans+=query(L,R,mid+1,r,id<<1|1);
return ans;
}
int main()
{
int t,m,n,i,j,k,a,b;
char s[10];
scanf("%d",&t);
for(j=1;j<=t;j++)
{
printf("Case %d:\n",j);
scanf("%d",&n);
build(1,n,1);
while(scanf("%s",s),s[0]!='E')
{
scanf("%d %d",&a,&b);
if(s[0]=='Q')
printf("%d\n",query(a,b,1,n,1));
if(s[0]=='A')
updata(a,b,1,n,1);
if(s[0]=='S')
updata(a,-b,1,n,1);
}
}
return 0;
}
int tree[200005];
void pushup(int id)
{
tree[id]=tree[id<<1]+tree[id<<1|1];
}
void build(int l,int r,int id)
{
if(l==r)
{
scanf("%d",&tree[id]);
return ;
}
int mid=l+r>>1;
build(l,mid,id<<1);
build(mid+1,r,id<<1|1);
pushup(id);
}
void updata(int p,int add,int l,int r,int id)
{
if(l==r)
{
tree[id]+=add;
return ;
}
int mid=l+r>>1;
if(p<=mid)
updata(p,add,l,mid,id<<1);
else
updata(p,add,mid+1,r,id<<1|1);
pushup(id);
}
int query(int L,int R,int l,int r,int id)
{
if(L<=l&&R>=r)
return tree[id];
int ans=0;
int mid=r+l>>1;
if(L<=mid)
ans+=query(L,R,l,mid,id<<1);
if(R>mid)
ans+=query(L,R,mid+1,r,id<<1|1);
return ans;
}
int main()
{
int t,m,n,i,j,k,a,b;
char s[10];
scanf("%d",&t);
for(j=1;j<=t;j++)
{
printf("Case %d:\n",j);
scanf("%d",&n);
build(1,n,1);
while(scanf("%s",s),s[0]!='E')
{
scanf("%d %d",&a,&b);
if(s[0]=='Q')
printf("%d\n",query(a,b,1,n,1));
if(s[0]=='A')
updata(a,b,1,n,1);
if(s[0]=='S')
updata(a,-b,1,n,1);
}
}
return 0;
}