#include<iostream>
#include<algorithm>
#include<queue>
#include<stack>
using namespace std;
const int maxn=2e5+10;
typedef long long ll;
struct cf{
int num;
ll s,t;
};
cf p[maxn];
struct ct{
int cnum;
ll t;
};
struct cmp{
bool operator() ( ct a, ct b ){
if( a.t== b.t ) return a.cnum> b.cnum;
return a.t> b.t;
}
};
priority_queue<ct, vector<ct>, cmp> qg;
priority_queue<ct, vector<ct>, cmp> qk;
vector<int> a[maxn];
bool cmpt(cf a,cf b){
return a.t<b.t;
}
int main()
{
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++){
p[i].num=i;
cin>>p[i].s>>p[i].t;
}
sort(p+1,p+n+1,cmpt);
for(int i=m;i>=1;i--){
qk.push({i,0});
}
for(int i=1;i<=n;i++){
int time=p[i].t;
while(!qg.empty()){
if(qg.top().t<=time){
qk.push({qg.top().cnum,0});
qg.pop();
}
}
if(qk.empty()){
ll more=qg.top().t;
p[i].t=more;
i--;
continue;
}
qg.push({qk.top().cnum,time+p[i].s});
a[qk.top().cnum].push_back(i);
qk.pop();
}
for(int i=1;i<=m;i++){
cout<<i<<" ";
for(int j=0;j<a[i].size();j++){
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}