#include <bits/stdc++.h>
using namespace std;
class kd_tree {
  struct nd {
    int bx, ex, by, ey, x;
    long long sum;
    vector<int> y;
    vector<long long> rs;
    nd *l;
    nd *r;
    nd() {
      sum = 0;
      bx = by = 10000;
      ex = ey = -10000;
    }
  };
  nd *root;
  void build(nd *curr, const vector<pair<int, pair<int, int>>> &v) {
    nd &u = *curr;
    if (v.size() == 0) return;
    if (v.size() == 1) {
      u.bx = u.ex = v[0].first;
      u.by = u.ey = v[0].second.first;
      u.sum = v[0].second.second;
      return;
    }
    u.x = v[v.size() >> 1].first;
    vector<pair<int, pair<int, int>>> r, l;
    u.rs.push_back(0);
    for (auto p : v) {
      if (p.first < u.x) {
        l.push_back(p);
      } else if (p.first > u.x) {
        r.push_back(p);
      } else {
        u.y.push_back(p.second.first);
        u.rs.push_back(u.rs.back() + p.second.second);
      }
      u.bx = min(u.bx, p.first);
      u.ex = max(u.ex, p.first);
      u.by = min(u.by, p.second.first);
      u.ey = max(u.ey, p.second.first);
      u.sum += p.second.second;
    }
    u.rs.push_back(u.rs.back());
    u.l = new nd();
    build(u.l, l);
    u.r = new nd();
    build(u.r, r);
  }
  long long query(nd *curr, const int &bx, const int &by, const int &ex,
                  const int &ey) {
    nd &u = *curr;
    if (bx > u.ex || ex < u.bx || by > u.ey || ey < u.by) return 0;
    if (bx <= u.bx && ex >= u.ex && by <= u.by && ey >= u.ey) return u.sum;
    long long ret = 0;
    ret += query(u.l, bx, by, ex, ey);
    ret += query(u.r, bx, by, ex, ey);
    if (u.x >= bx && u.x <= ex) {
      int rb = lower_bound(u.y.begin(), u.y.end(), by) - u.y.begin();
      int re = upper_bound(u.y.begin(), u.y.end(), ey) - u.y.begin();
      ret += u.rs[re] - u.rs[rb];
    }
    return ret;
  }

 public:
  void initi(const vector<pair<int, pair<int, int>>> &v) {
    root = new nd();
    build(root, v);
  }
  long long get_sum(const int &bx, const int &by, const int &ex,
                    const int &ey) {
    return query(root, bx, by, ex, ey);
  }
};
int main() {
  ios_base::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL);
  int n, m, k;
  scanf("%d%d%d", &n, &m, &k);
  vector<kd_tree> gar(k);
  vector<bool> is_on(k, true);
  for (int i = 0, x, y, w, o; i < k; ++i) {
    vector<pair<int, pair<int, int>>> v;
    scanf("%d", &o);
    for (int j = 0; j < o; ++j) {
      scanf("%d%d%d", &x, &y, &w);
      v.push_back(make_pair(x, make_pair(y, w)));
    }
    sort(v.begin(), v.end());
    gar[i].initi(v);
  }
  int q;
  scanf("%d", &q);
  while (q--) {
    char s[7];
    scanf("%s", s);
    if (s[0] == 'A') {
      int bx, by, ex, ey;
      scanf("%d%d%d%d", &bx, &by, &ex, &ey);
      long long ans = 0;
      for (int i = 0; i < k; ++i)
        if (is_on[i]) ans += gar[i].get_sum(bx, by, ex, ey);
      printf("%I64d\n", ans);
    } else {
      int i;
      scanf("%d", &i);
      is_on[i - 1] = !is_on[i - 1];
    }
  }
}
