#include <bits/stdc++.h>
using namespace std;
const int MAXR = 52;
const int MAXD = 360;
const int MAXS = 181;
int fenw[MAXR+1][MAXD+1][MAXS+1];
// Funkcja konwersji liter R na indeks 1..52
int rIndex(char c) {
if ('A' <= c && c <= 'Z') return c - 'A' + 1;
return c - 'a' + 27;
}
// Funkcja konwersji string D (3 cyfry) na liczbę
int dIndex(const string &d) {
return stoi(d);
}
// Funkcja konwersji S (+/- i 2 cyfry) na indeks 1..181
int sIndex(const string &s) {
int val = stoi(s.substr(1));
if (s[0] == '+') return val + 90;
return 90 - val + 1; // np. -90 -> 1, -01 -> 90
}
// Fenwick Tree 3D - update
void update(int r, int d, int s, int val) {
for (int i = r; i <= MAXR; i += i & (-i))
for (int j = d; j <= MAXD; j += j & (-j))
for (int k = s; k <= MAXS; k += k & (-k))
fenw[i][j][k] += val;
}
// Fenwick Tree 3D - query prefix sum
int query(int r, int d, int s) {
int res = 0;
for (int i = r; i > 0; i -= i & (-i))
for (int j = d; j > 0; j -= j & (-j))
for (int k = s; k > 0; k -= k & (-k))
res += fenw[i][j][k];
return res;
}
// Suma w zakresie
int rangeSum(int r1, int d1, int s1, int r2, int d2, int s2) {
return query(r2,d2,s2) - query(r1-1,d2,s2) - query(r2,d1-1,s2) - query(r2,d2,s1-1)
+ query(r1-1,d1-1,s2) + query(r1-1,d2,s1-1) + query(r2,d1-1,s1-1) - query(r1-1,d1-1,s1-1);
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
string line;
while (getline(cin, line)) {
if (line.empty()) continue;
stringstream ss(line);
int type; ss >> type;
if (type == 1 || type == 2) {
string RDS; long long W; ss >> RDS >> W;
int r = rIndex(RDS[0]);
int d = dIndex(RDS.substr(1,3));
int s = sIndex(RDS.substr(4,3));
int val = (type == 1) ? W : -W;
update(r, d, s, val);
} else if (type == 3) {
string R1, R2; long long W; ss >> R1 >> R2 >> W;
int r1 = rIndex(R1[0]), d1 = dIndex(R1.substr(1,3)), s1 = sIndex(R1.substr(4,3));
int r2 = rIndex(R2[0]), d2 = dIndex(R2.substr(1,3)), s2 = sIndex(R2.substr(4,3));
update(r1, d1, s1, -W);
update(r2, d2, s2, W);
} else if (type == 4) {
string R1, R2; ss >> R1 >> R2;
int r1 = rIndex(R1[0]), d1 = dIndex(R1.substr(1,3)), s1 = sIndex(R1.substr(4,3));
int r2 = rIndex(R2[0]), d2 = dIndex(R2.substr(1,3)), s2 = sIndex(R2.substr(4,3));
if (r1 > r2) swap(r1, r2);
if (d1 > d2) swap(d1, d2);
if (s1 > s2) swap(s1, s2);
cout << rangeSum(r1, d1, s1, r2, d2, s2) << "\n";
}
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgTUFYUiA9IDUyOwpjb25zdCBpbnQgTUFYRCA9IDM2MDsKY29uc3QgaW50IE1BWFMgPSAxODE7CgppbnQgZmVud1tNQVhSKzFdW01BWEQrMV1bTUFYUysxXTsKCi8vIEZ1bmtjamEga29ud2Vyc2ppIGxpdGVyIFIgbmEgaW5kZWtzIDEuLjUyCmludCBySW5kZXgoY2hhciBjKSB7CiAgICBpZiAoJ0EnIDw9IGMgJiYgYyA8PSAnWicpIHJldHVybiBjIC0gJ0EnICsgMTsKICAgIHJldHVybiBjIC0gJ2EnICsgMjc7Cn0KCi8vIEZ1bmtjamEga29ud2Vyc2ppIHN0cmluZyBEICgzIGN5ZnJ5KSBuYSBsaWN6YsSZCmludCBkSW5kZXgoY29uc3Qgc3RyaW5nICZkKSB7CiAgICByZXR1cm4gc3RvaShkKTsKfQoKLy8gRnVua2NqYSBrb253ZXJzamkgUyAoKy8tIGkgMiBjeWZyeSkgbmEgaW5kZWtzIDEuLjE4MQppbnQgc0luZGV4KGNvbnN0IHN0cmluZyAmcykgewogICAgaW50IHZhbCA9IHN0b2kocy5zdWJzdHIoMSkpOwogICAgaWYgKHNbMF0gPT0gJysnKSByZXR1cm4gdmFsICsgOTA7CiAgICByZXR1cm4gOTAgLSB2YWwgKyAxOyAvLyBucC4gLTkwIC0+IDEsIC0wMSAtPiA5MAp9CgovLyBGZW53aWNrIFRyZWUgM0QgLSB1cGRhdGUKdm9pZCB1cGRhdGUoaW50IHIsIGludCBkLCBpbnQgcywgaW50IHZhbCkgewogICAgZm9yIChpbnQgaSA9IHI7IGkgPD0gTUFYUjsgaSArPSBpICYgKC1pKSkKICAgICAgICBmb3IgKGludCBqID0gZDsgaiA8PSBNQVhEOyBqICs9IGogJiAoLWopKQogICAgICAgICAgICBmb3IgKGludCBrID0gczsgayA8PSBNQVhTOyBrICs9IGsgJiAoLWspKQogICAgICAgICAgICAgICAgZmVud1tpXVtqXVtrXSArPSB2YWw7Cn0KCi8vIEZlbndpY2sgVHJlZSAzRCAtIHF1ZXJ5IHByZWZpeCBzdW0KaW50IHF1ZXJ5KGludCByLCBpbnQgZCwgaW50IHMpIHsKICAgIGludCByZXMgPSAwOwogICAgZm9yIChpbnQgaSA9IHI7IGkgPiAwOyBpIC09IGkgJiAoLWkpKQogICAgICAgIGZvciAoaW50IGogPSBkOyBqID4gMDsgaiAtPSBqICYgKC1qKSkKICAgICAgICAgICAgZm9yIChpbnQgayA9IHM7IGsgPiAwOyBrIC09IGsgJiAoLWspKQogICAgICAgICAgICAgICAgcmVzICs9IGZlbndbaV1bal1ba107CiAgICByZXR1cm4gcmVzOwp9CgovLyBTdW1hIHcgemFrcmVzaWUKaW50IHJhbmdlU3VtKGludCByMSwgaW50IGQxLCBpbnQgczEsIGludCByMiwgaW50IGQyLCBpbnQgczIpIHsKICAgIHJldHVybiBxdWVyeShyMixkMixzMikgLSBxdWVyeShyMS0xLGQyLHMyKSAtIHF1ZXJ5KHIyLGQxLTEsczIpIC0gcXVlcnkocjIsZDIsczEtMSkKICAgICAgICAgICArIHF1ZXJ5KHIxLTEsZDEtMSxzMikgKyBxdWVyeShyMS0xLGQyLHMxLTEpICsgcXVlcnkocjIsZDEtMSxzMS0xKSAtIHF1ZXJ5KHIxLTEsZDEtMSxzMS0xKTsKfQoKaW50IG1haW4oKSB7CiAgICBpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKG51bGxwdHIpOwoKICAgIHN0cmluZyBsaW5lOwogICAgd2hpbGUgKGdldGxpbmUoY2luLCBsaW5lKSkgewogICAgICAgIGlmIChsaW5lLmVtcHR5KCkpIGNvbnRpbnVlOwogICAgICAgIHN0cmluZ3N0cmVhbSBzcyhsaW5lKTsKICAgICAgICBpbnQgdHlwZTsgc3MgPj4gdHlwZTsKICAgICAgICBpZiAodHlwZSA9PSAxIHx8IHR5cGUgPT0gMikgewogICAgICAgICAgICBzdHJpbmcgUkRTOyBsb25nIGxvbmcgVzsgc3MgPj4gUkRTID4+IFc7CiAgICAgICAgICAgIGludCByID0gckluZGV4KFJEU1swXSk7CiAgICAgICAgICAgIGludCBkID0gZEluZGV4KFJEUy5zdWJzdHIoMSwzKSk7CiAgICAgICAgICAgIGludCBzID0gc0luZGV4KFJEUy5zdWJzdHIoNCwzKSk7CiAgICAgICAgICAgIGludCB2YWwgPSAodHlwZSA9PSAxKSA/IFcgOiAtVzsKICAgICAgICAgICAgdXBkYXRlKHIsIGQsIHMsIHZhbCk7CiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IDMpIHsKICAgICAgICAgICAgc3RyaW5nIFIxLCBSMjsgbG9uZyBsb25nIFc7IHNzID4+IFIxID4+IFIyID4+IFc7CiAgICAgICAgICAgIGludCByMSA9IHJJbmRleChSMVswXSksIGQxID0gZEluZGV4KFIxLnN1YnN0cigxLDMpKSwgczEgPSBzSW5kZXgoUjEuc3Vic3RyKDQsMykpOwogICAgICAgICAgICBpbnQgcjIgPSBySW5kZXgoUjJbMF0pLCBkMiA9IGRJbmRleChSMi5zdWJzdHIoMSwzKSksIHMyID0gc0luZGV4KFIyLnN1YnN0cig0LDMpKTsKICAgICAgICAgICAgdXBkYXRlKHIxLCBkMSwgczEsIC1XKTsKICAgICAgICAgICAgdXBkYXRlKHIyLCBkMiwgczIsIFcpOwogICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSA0KSB7CiAgICAgICAgICAgIHN0cmluZyBSMSwgUjI7IHNzID4+IFIxID4+IFIyOwogICAgICAgICAgICBpbnQgcjEgPSBySW5kZXgoUjFbMF0pLCBkMSA9IGRJbmRleChSMS5zdWJzdHIoMSwzKSksIHMxID0gc0luZGV4KFIxLnN1YnN0cig0LDMpKTsKICAgICAgICAgICAgaW50IHIyID0gckluZGV4KFIyWzBdKSwgZDIgPSBkSW5kZXgoUjIuc3Vic3RyKDEsMykpLCBzMiA9IHNJbmRleChSMi5zdWJzdHIoNCwzKSk7CiAgICAgICAgICAgIGlmIChyMSA+IHIyKSBzd2FwKHIxLCByMik7CiAgICAgICAgICAgIGlmIChkMSA+IGQyKSBzd2FwKGQxLCBkMik7CiAgICAgICAgICAgIGlmIChzMSA+IHMyKSBzd2FwKHMxLCBzMik7CiAgICAgICAgICAgIGNvdXQgPDwgcmFuZ2VTdW0ocjEsIGQxLCBzMSwgcjIsIGQyLCBzMikgPDwgIlxuIjsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gMDsKfQ==