#include<iostream>
#include<vector>
using namespace std;
struct Node{
int value;
int next;
int address;
}node[100010];
int main()
{
#ifdef ONLINE_JUDGE
#else
freopen("in.txt","r",stdin);
#endif
int n,k;
int f;
cin>>f>>n>>k;
vector<Node> a,b,c;
for(int i=0;i<n;i++){
int add,nex;
int data;
cin>>add>>data>>nex;
node[add].next=nex;
node[add].value=data;
node[add].address=add;
}
int p;
for(p=f;p!=-1;p=node[p].next){
if(node[p].value<0){
a.push_back(node[p]);
}else if(node[p].value<=k&&node[p].value>=0){
b.push_back(node[p]);
}else{
c.push_back(node[p]);
}
}
for(int i=0;i<a.size();i++){
if(i<=a.size()-2){
a[i].next=a[i+1].address;
printf("%05d %d %05d\n",a[i].address,a[i].value,a[i].next);
//cout<<a[i].address<<' '<<a[i].value<<' '<<a[i].next<<endl;
}else if(b.size()!=0){
a[i].next=b[0].address;
printf("%05d %d %05d\n",a[i].address,a[i].value,a[i].next);
//cout<<a[i].address<<' '<<a[i].value<<' '<<a[i].next<<endl;
}else{
a[i].next=-1;
printf("%05d %d %d\n",a[i].address,a[i].value,a[i].next);
//cout<<a[i].address<<' '<<a[i].value<<' '<<a[i].next<<endl;
}
}
for(int i=0;i<b.size();i++){
if(i<=b.size()-2){
b[i].next=b[i+1].address;
printf("%05d %d %05d\n",b[i].address,b[i].value,b[i].next);
//cout<<b[i].address<<' '<<b[i].value<<' '<<b[i].next<<endl;
}else if(c.size()!=0){
b[i].next=c[0].address;
printf("%05d %d %05d\n",b[i].address,b[i].value,b[i].next);
//cout<<b[i].address<<' '<<b[i].value<<' '<<b[i].next<<endl;
}else{
b[i].next=-1;
printf("%05d %d %d\n",b[i].address,b[i].value,b[i].next);
//cout<<b[i].address<<' '<<b[i].value<<' '<<b[i].next<<endl;
}
}
for(int i=0;i<c.size();i++){
if(i<=c.size()-2){
c[i].next=c[i+1].address;
printf("%05d %d %05d\n",c[i].address,c[i].value,c[i].next);
//cout<<c[i].address<<' '<<c[i].value<<' '<<c[i].next<<endl;
}else{
c[i].next=-1;
printf("%05d %d %d\n",c[i].address,c[i].value,c[i].next);
//cout<<c[i].address<<' '<<c[i].value<<' '<<c[i].next<<endl;
}
}
return 0;
}