#include<bits/stdc++.h>
using namespace std;
struct node{
int s,t,id;
}a[1000005];
bool operator <(node a,node b)
{
return a.t<b.t;
}
vector<int> ans[1000005];
struct res{
int now,id;
bool operator <(const res &x) const{
return now>x.now or (now==x.now and id>x.id);
}
};
priority_queue <res> q1,q2;
int main()
{
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++) { cin>>a[i].s>>a[i].t;a[i].id=i;}
sort(a+1,a+1+n);
for(int i=1;i<=m;i++) q1.push(res{0,i});
for(int i=1;i<=n;i++)
{
if(!q2.empty())
{
vector<int> v;
while(!q2.empty())
{
int x=q2.top().now;
if(x>a[i].t) break;
v.push_back(q2.top().id);
q2.pop();
}
for(int j=0;j<v.size();j++) q1.push(res{0,v[j]});
}
int id;
if(!q1.empty())
{
id=q1.top().id;
q1.pop();
q2.push(res{a[i].t+a[i].s,id});
}
else
{
id=q1.top().id;
q2.push(res{q1.top().now+a[i].s,id});
q1.pop();
}
ans[id].push_back(a[i].id);
}
for(int i=1;i<=m;i++)
{
cout<<ans[i].size()<<" ";
sort(ans[i].begin(),ans[i].end());
for(int j=0;j<ans[i].size();j++) cout<<ans[i][j]<<" ";
cout<<endl;
}
return 0;
}