OI IX - kol

// 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;
}