#include<bits/stdc++.h>
using namespace std;
const int N = 60010;
struct node{
int l,r,value,tag;
} tri[N * 4];
int c,s,Q;
void build(int p,int l,int r){
tri[p].l = l;
tri[p].r = r;
tri[p].value = s;
if(l == r){
return;
}
int mid = (l + r) / 2;
build(p * 2,l,mid);
build(p * 2 + 1,mid + 1,r);
}
void revise(int p,int value){
tri[p].value -= value;
tri[p].tag += value;
}
void pushdown(int p){
revise(p * 2,tri[p].tag);
revise(p * 2 + 1,tri[p].tag);
tri[p].value = min(tri[p * 2].value,tri[p * 2 + 1].value);
tri[p].tag = 0;
}
void update(int p,int l,int r,int v){
if(tri[p].l >= l and tri[p].r <= r){
revise(p,v);
return;
}
pushdown(p);
int mid = (tri[p].l + tri[p].r) / 2;
if(mid >= l){
update(p * 2,l,r,v);
}
if(mid < r){
update(p * 2 + 1,l,r,v);
}
tri[p].value = min(tri[p * 2].value,tri[p * 2 + 1].value);
}
int query(int p,int l,int r){
if(tri[p].l >= l and tri[p].r <= r){
return tri[p].value;
}
pushdown(p);
int mid = (tri[p].l + tri[p].r) / 2,ret = INT_MAX;
if(mid >= l){
ret = min(ret,query(p * 2,l,r));
}
if(mid < r){
ret = min(ret,query(p * 2 + 1,l,r));
}
return ret;
}
int main(){
freopen("b.out","w",stdout);
scanf("%d%d%d",&c,&s,&Q);
build(1,1,c);
while(Q --){
int o,d,n;
scanf("%d%d%d",&o,&d,&n);
if(query(1,o,d) >= n){
printf("T\n");
update(1,o,d,n);
}else{
printf("N\n");
}
}
return 0;
}