#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define Maxn 50005
using namespace std;
int Q[Maxn*4];
int T,N,ql,qr,p,v;
///建立线段树,建立树时更新每一个父节点,父节点的值为左右子树的值
void build(int rt,int L,int R){
if(L==R){
scanf("%d",&Q[rt]);
return;
}
else{
int M=(L+R)>>1;
build(rt*2,L,M);
build(rt*2+1,M+1,R);
Q[rt]=Q[rt*2]+Q[rt*2+1];
}
}
///查询线段树
int query(int r,int L,int R,int ql,int qr){
int M=(L+R)>>1;
if(ql<=L&&R<=qr)
return Q[r];
if(qr<=M) return query(2*r,L,M,ql,qr);
else if(ql>M) return query(2*r+1,M+1,R,ql,qr);
else{
return query(2*r,L,M,ql,qr)+query(2*r+1,M+1,R,ql,qr);
}
}
///更新线段树
void update(int r,int L,int R,int ql,int qr){
int M=(L+R)>>1;
if(L==ql&&R==ql){
Q[r]+=qr;
return ;
}
else{
if(ql<=M) update(r*2,L,M,ql,qr);
else update(r*2+1,M+1,R,ql,qr);
Q[r] = Q[r*2] + Q[r*2+1];
}
}
int main(){
int i=0;
scanf("%d",&T);
while(T--){
i++;
scanf("%d",&N);
build(1,1,N);
printf("Case %d:\n",i);
char op[5];
int a,b;
while(scanf("%s",op)){
if(op[0]=='E')
break;
scanf("%d%d",&a,&b);
if(op[0]=='A'){
p=a,v=b;
update(1,1,N,p,v);
}
else if(op[0]=='Q'){
ql=a,qr=b;
printf("%d\n",query(1,1,N,ql,qr));
}
else if(op[0]=='S'){
p=a,v=b;
update(1,1,N,p,-v);
}
}
}
}