#include<cstdio>
#include<iostream>
#include<cstring>
#include<string.h>
#include<algorithm>
using namespace std;
const int maxn = 50000 + 5;
int v[maxn];
struct node
{
int left, right, sum;
node (int left = 0, int right = 0, int sum = 0) : left(left), right(right), sum(sum){}
}k[150000];
int n;
void build(int left, int right, int i)
{
k[i].left = left;
k[i].right = right;
if(left == right)
{
k[i].sum = v[left];
return;
}
int mid = (left+right)/2;
build(left, mid, 2*i);
build(mid + 1, right, 2 * i + 1);
k[i].sum = k[2*i].sum + k[2*i+1].sum;
}
void Add(int id, int num, int i)
{
if(k[i].left == k[i].right)
{
k[i].sum += num;
return ;
}
k[i].sum += num;
if(id <= k[2*i].right) Add(id, num, 2 * i);
else Add(id, num, 2 * i + 1);
return ;
}
int query(int left, int right, int i)
{
int mid;
if(k[i].left == left && k[i].right == right) return k[i].sum;
mid = (k[i].left + k[i].right)/2;
if(right <= mid) return query(left, right, 2 * i);
else if(left >mid) return query(left, right, 2 * i + 1);
else return query(left, mid, 2*i) + query(mid+1, right, 2*i + 1);
}
int main()
{
int T;
cin >> T;
int kase = 0;
while(T--)
{
printf("Case %d:\n", ++kase);
memset(v,0,sizeof(v));
memset(k,0,sizeof(k));
scanf("%d", &n);
for(int i = 1; i <= n; ++i) scanf("%d", &v[i]);
build(1, n, 1);
string s;
while(cin >> s && s != "End")
{
if(s=="Add")
{
int id, num;
scanf("%d%d", &id, &num);
Add(id,num, 1);
}
else if(s=="Sub")
{
int id, num;
scanf("%d%d", &id, &num);
Add(id, -num, 1);
}
else if(s=="Query")
{
int x, y;
scanf("%d%d", &x, &y);
cout << query(x, y, 1) << endl;
}
}
}
return 0;
}