// https://szkopul.edu.pl/problemset/problem/VYTSyRwgdwmLf56i_ffWGB0L/site/?key=statement
#include <bits/stdc++.h>
using namespace std;
#define int long long
constexpr int sizik = 60 * 1001, INF = INT32_MAX;
#define ar std::array
#define pr std::pair
#define vec std::vector
typedef vec<vec<int>> _kra;
int d[4 * sizik], lazy[4 * sizik];
int n, m, q;
void push(int v) {
d[2 * v] += lazy[v];
lazy[2 * v] += lazy[v];
d[2 * v + 1] += lazy[v];
lazy[2 * v + 1] += lazy[v];
lazy[v] = 0;
}
int query(int v, int tl, int tr, int l, int r) {
if (l > r) return -1;
if (tl == l && tr == r) {
return d[v];
}
push(v);
int tm = (tl + tr) / 2;
return std::max(query(2 * v, tl, tm, l, std::min(r, tm)), query(2 * v + 1, tm + 1, tr, std::max(l, tm + 1), r));
}
int query(int l, int r) {
return query(1, 1, n, l, r);
}
void update(int v, int tl, int tr, int l, int r, int a) {
if (l > r) return;
if (tl == l && tr == r) {
d[v] += a;
lazy[v] += a;
return;
}
push(v);
int tm = (tl + tr) / 2;
update(2 * v, tl, tm, l, std::min(r, tm), a);
update(2 * v + 1, tm + 1, tr, std::max(l, tm + 1), r, a);
d[v] = std::max(d[2 * v], d[2 * v + 1]);
}
void update(int l, int r, int a) {
return update(1, 1, n, l, r, a);
}
void solve() {
std::cin >> n >> m >> q;
for (; q > 0; q--) {
int p, k, l;
std::cin >> p >> k >> l;
k--;
// std::cout << p << " " << k << " " << l << " | " << query(p, k) << " | " << m - l - query(p, k) << '\n';
if (m - query(p, k) >= l) {
std::cout << "T\n";
update(p, k, l);
} else {
std::cout << "N\n";
}
}
}
int32_t main() {
std::ios_base::sync_with_stdio(0);
std::cin.tie(0);
std::cout.tie(0);
int t = 1;
// std::cin >> t;
for (; t > 0; t--) {
solve();
}
return 0;
}