1 #include<cstdio>
2 #include<algorithm>
3 using namespace std;
4 const int maxn=60000+10;
5 int tree[maxn<<2],lazy[maxn<<2];
6 void Build(int rt,int l,int r){
7 if(l==r){
8 tree[rt]=0;
9 return ;
10 }
11 int mid=(l+r)>>1;
12 Build(rt<<1,l,mid);
13 Build(rt<<1|1,mid+1,r);
14 tree[rt]=max(tree[rt<<1],tree[rt<<1|1]);
15 }
16 void update(int rt,int l,int r,int w){
17 tree[rt]+=w;
18 lazy[rt]+=w;
19 }
20 void pushdown(int rt,int l,int r){
21 int mid=(l+r)>>1;
22 update(rt<<1,l,mid,lazy[rt]);
23 update(rt<<1|1,mid+1,r,lazy[rt]);
24 lazy[rt]=0;
25 }
26 void Modify(int rt,int l,int r,int s,int t,int w){
27 if(s<=l&&t>=r){
28 update(rt,l,r,w);
29 return ;
30 }
31 // pushdown(rt,l,r);
32 int mid=(l+r)>>1;
33 if(s<=mid) Modify(rt<<1,l,mid,s,t,w);
34 if(t>mid) Modify(rt<<1|1,mid+1,r,s,t,w);
35 tree[rt]=max(tree[rt<<1],tree[rt<<1|1]);
36 }
37 int query(int rt,int l,int r,int s,int t){
38 if(s<=l&&t>=r){
39 // update(rt,l,r);
40 return tree[rt];
41 }
42 int mid=(r+l)>>1;
43 pushdown(rt,l,r);
44 if(t<=mid) return query(rt<<1,l,mid,s,t);
45 else if(s>mid) return query(rt<<1|1,mid+1,r,s,t);
46 else return max(query(rt<<1,l,mid,s,t),query(rt<<1|1,mid+1,r,s,t));
47 }
48 int main(){
49 int c,s,R;
50 scanf("%d%d%d",&c,&s,&R);
51 //Build(1,1,c-1);
52 for(int i=1;i<=R;i++){
53 int l,r,w;
54 scanf("%d%d%d",&l,&r,&w);
55 r--;
56 int sum=query(1,1,c-1,l,r);
57 if(sum+w<=s){
58 printf("YES\n");
59 Modify(1,1,c-1,l,r,w);
60 }
61 else {
62 printf("NO\n");
63 }
64 }
65
66 return 0;
67 }