rt
#include<bits/stdc++.h>
using namespace std;
const int N=100005;
int C,S,R;
struct ST{
int l,r;
int num;
int la;
}t[N*4];
void build(int node,int l,int r){
int mid=(l+r)/2;
t[node].l=l;
t[node].r=r;
if(l==r){
return ;
}
build(node*2,l,mid);
build(node*2+1,mid+1,r);
}
void pd(int node){
if(t[node].la!=0){
t[node*2].la+=t[node].la;
t[node*2+1].la+=t[node].la;
int mid=(t[node].l+t[node].r)/2;
t[node*2].num+=t[node].la*(mid-t[node*2].l+1);
t[node*2+1].num+=t[node].la*(t[node*2+1].r-mid);
t[node].la=0;
}
}
void add(int l,int r,int k,int node){
if(t[node].r<=r&&t[node].l>=l){
t[node].num+=k;
t[node].la+=k;
return ;
}
pd(node);
if(t[node*2].r>=l){
add(l,r,k,node*2);
}
if(t[node*2+1].l<=r){
add(l,r,k,node*2+1);
}
t[node].num=max(t[node*2].num,t[node*2+1].num);
}
int query(int node,int l,int r){
if(t[node].l>r||t[node].r<l){
return INT_MIN;
}
if(t[node].r<=r&&t[node].l>=l){
return t[node].num;
}
pd(node);
return max(query(node*2,l,r),query(node*2+1,l,r));
}
int main(){
cin>>C>>S>>R;
build(1,1,C);
while(R--){
int o,d,n;
cin>>o>>d>>n;
d--;
if(n+query(1,o,d)>S){
cout<<"N\n";
}else{
add(o,d,n,1);
cout<<"T\n";
}
//cout<<query(1,o,d)<<"\n";
}
return 0;
}