#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:66777216")
using namespace std;
const int N = 2000 + 5;
int n, m, k;
int L;
std::vector<std::pair<int, int> > u[N];
std::vector<int> w[N];
int top;
std::pair<int, int> s[N], f[N];
int in[N];
const int M = 1000000 + 5;
int ty[M];
int val[M];
long long q[N][N];
bool sw[N][N];
char st[100];
bool mark[N];
vector<int> S[N];
vector<int> F[N];
vector<int> IN[N];
long long fe[N];
long long get(int x) {
  if (x == 0) return 0;
  long long res = 0;
  for (; x; x -= x & (-x)) res += fe[x];
  return res;
}
void update(int x, int val) {
  for (; x <= m; x += x & (-x)) fe[x] += val;
}
std::vector<std::pair<int, int> > B[N];
void solve() {
  scanf("%d%d%d", &n, &m, &k);
  for (int i = 1; i <= (int)(k); ++i) {
    scanf("%d", &L);
    u[i].resize(L);
    w[i].resize(L);
    for (int j = 0; j < (int)(L); ++j) {
      scanf("%d%d%d", &u[i][j].first, &u[i][j].second, &w[i][j]);
    }
  }
  int Q;
  scanf("%d", &Q);
  for (int i = 1; i <= (int)(Q); ++i) {
    scanf("%s", st);
    if (st[0] == 'A') {
      ++top;
      val[i] = top;
      ty[i] = 1;
      scanf("%d%d%d%d", &s[top].first, &s[top].second, &f[top].first,
            &f[top].second);
    } else {
      ty[i] = 2;
      scanf("%d", &val[i]);
    }
  }
  for (int i = 1; i <= (int)(k); ++i) mark[i] = 1;
  for (int i = 1; i <= (int)(Q); ++i) {
    if (ty[i] == 2)
      mark[val[i]] ^= 1;
    else {
      int u = val[i];
      for (int j = 1; j <= (int)(k); ++j) sw[u][j] = mark[j];
    }
  }
  for (int i = 1; i <= (int)(top); ++i) {
    int u = f[i].first;
    S[u].push_back(s[i].second);
    F[u].push_back(f[i].second);
    IN[u].push_back(i);
    u = s[i].first - 1;
    S[u].push_back(s[i].second);
    F[u].push_back(f[i].second);
    IN[u].push_back(-i);
  }
  for (int e = 1; e <= (int)(k); ++e) {
    for (int i = 1; i <= (int)(m); ++i) fe[i] = 0;
    for (int i = 0; i < (int)(((int)((u[e]).size()))); ++i)
      B[u[e][i].first].push_back(make_pair(u[e][i].second, w[e][i]));
    for (int i = 1; i <= (int)(n); ++i) {
      for (int j = 0; j < (int)(((int)((B[i]).size()))); ++j)
        update(B[i][j].first, B[i][j].second);
      for (int j = 0; j < (int)(((int)((IN[i]).size()))); ++j) {
        long long val = get(F[i][j]) - get(S[i][j] - 1);
        if (IN[i][j] > 0)
          q[IN[i][j]][e] += val;
        else
          q[-IN[i][j]][e] -= val;
      }
    }
    for (int i = 0; i < (int)(((int)((u[e]).size()))); ++i) {
      B[u[e][i].first].clear();
    }
  }
  for (int i = 1; i <= (int)(top); ++i) {
    long long ans = 0;
    for (int j = 1; j <= (int)(k); ++j) {
      if (sw[i][j]) ans += q[i][j];
    }
    cout << ans << endl;
  }
}
void testgen() {
  FILE* f = fopen("input.txt", "w");
  fclose(f);
}
int main() {
  std::cout << std::fixed;
  std::cout.precision(8);
  std::cerr << std::fixed;
  std::cerr.precision(3);
  solve();
  return 0;
}
