#include<bits/stdc++.h>
using namespace std;
#define l(x) t[x].l
#define r(x) t[x].r
#define dat(x) t[x].dat
#define sum(x) t[x].sum
#define add(x) t[x].add
#define clean(x, y) memset(x, y, sizeof(x))
typedef long long LL;
#degine int long long
int dis[200010];
int a[200010];
const int maxn = 2e5 + 100;
int h,w,n;
struct tree {
int l, r;
LL dat, sum, add;
} t[maxn << 2];
void build(int p, int l, int r) {
l(p) = l, r(p) = r;
if (l == r) { sum(p) = a[l]; return ; }
int mid = (l + r) >> 1;
build(p << 1, l, mid);
build(p << 1 | 1, mid + 1, r);
dat(p) = dat(p << 1) + dat(p << 1 | 1);
}
void spread(int p) {
if (add(p)) {
add(p << 1) += add(p);
add(p << 1 | 1) += add(p);
dat(p << 1) += add(p);
dat(p << 1 | 1) += add(p);
add(p) = 0;
}
}
void change(int p, int l, int r, int d) {
if (l <= l(p) && r >= r(p)) {
sum(p) += (LL) d * (r(p) - l(p) + 1);
add(p) += d;
dat(p) += d;
return ;
}
spread(p);
int mid = (l(p) + r(p)) >> 1;
if (l <= mid) change(p << 1, l, r, d);
if (r > mid) change(p << 1 | 1, l, r, d);
sum(p) = sum(p << 1) + sum(p << 1 | 1);
dat(p) = max(dat(p << 1), dat(p << 1 | 1));
}
LL ask(int p, int l, int r) {
if (l <= l(p) && r >= r(p)) return dat(p);
spread(p);
int mid = (l(p) + r(p)) >> 1;
LL val = 0;
if (l <= mid) val = max(val, ask(p << 1, l, r));
if (r > mid) val = max(val, ask(p << 1 | 1, l, r));
return val;
}
int rr[200010],c[200010],ll[200010];
int op[200010];
bool cmp(int id1,int id2){
return rr[id1]>rr[id2];
}
int main(){
cin>>h>>w>>n;
build(1,1,200010);
for(int i=1;i<=n;i++){
cin>>rr[i]>>c[i]>>ll[i];
dis[i]=i;
}
sort(dis+1,dis+n+1,cmp);
for(int i=1;i<=n;i++){
int id=dis[i];
int ans=ask(1,c[id],c[id]+ll[id]-1);
change(1,c[id],c[id]+ll[id]-1,1);
op[id]=ans;
}
for(int i=1;i<=n;i++){
cout<<h-op[i]<<endl;
}
}