#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <ctime>
#define N 10
using namespace std;
class node
{
public:
int l,r;
int max;
int add;
//node();
node(){};
/*node(int _l,int _r,int _max,int _add)
{
//l=0;
this->l=_l;
this->r=_r;
this->max=_max;
this->add=_add;
}*/
}tree[N*4];
//node::node(int _l,int _r,int _max,int _add)
int max(int a,int b)
{
if (a>b)
return a;
return b;
}
int query(int,int,int);
void list()
{
int i,j;
for (j=1;j<=N;j++)
for (i=0;i<4*N;i++)
if (tree[i].l==tree[i].r&&tree[i].l==j)
printf("%d ",query(1,tree[i].l,tree[i].r));
printf("\n");
}
void build(int v,int l,int r)
{
tree[v].l=l;
tree[v].r=r;
tree[v].max=tree[v].add=0;
if (l==r)
{
tree[v].max=0;
//tree[v].max=rand()%100;
return ;
}
build(v*2,l,(l+r)>>1);
build(v*2+1,((l+r)>>1)+1,r);
tree[v].max=max(tree[2*v].max,tree[2*v+1].max);//an operator??
}
void insert(int v,int l,int r,int k)
{
if (l<=tree[v].l&&tree[v].r<=r)
{
tree[v].add+=k;
tree[v].max+=k;
return;
}
if (l<=tree[2*v].r)
insert(2*v,l,r,k);
if (r>=tree[2*v+1].l)
insert(2*v+1,l,r,k);
tree[v].max=max(tree[2*v].max,tree[2*v+1].max);
}
int query(int v,int l,int r)
{
if (l<=tree[v].l&&tree[v].r<=r)
return tree[v].max;
if (tree[v].add/*&&tree[v].l!=tree[v].r*/)
{
tree[2*v].add+=tree[v].add;
tree[2*v+1].add+=tree[v].add;
tree[2*v].max+=tree[v].add;
tree[2*v+1].max+=tree[v].add;
}
tree[v].add=0;
int ans=0;
if (l<=tree[2*v].r)
ans=max(ans,query(2*v,l,r));
if (r>=tree[2*v+1].l)
ans=max(ans,query(2*v+1,l,r));
return ans;
}
void init()
{
build(1,1,N);
}
int main()
{
int a,b,c;
srand(time(NULL));
init();
while (scanf("%d%d%d",&a,&b,&c)==3&&a&&b)
{
insert(1,a,b,c);
list();
}
return 0;
}