#include<bits/stdc++.h>
#define int long long
#define pi pair<int,int>
#define mp make_pair
#define rg register
using namespace std;
const int N=2e5+5;
int n,m;
struct node{int s,t,p;}bag[N];
int ans[N];
priority_queue<pi,vector<pi>,greater<pi> > q1,q2;
vector<int> a[N];
inline bool cmp(node a,node b){return a.t<b.t;}
signed main(){
// freopen("print.in","r",stdin);
// freopen("print.out","w",stdout);
scanf("%lld%lld",&n,&m);
for(rg int i=1;i<=n;++i) scanf("%lld%lld",&bag[i].s,&bag[i].t),bag[i].p=i;
sort(bag+1,bag+n+1,cmp);
for(rg int i=1;i<=m;++i) q1.push(mp(i,0));
for(rg int i=1;i<=n;++i){
while(q2.size() and q2.top().first<=bag[i].t){
pi f=q2.top();
q2.pop();
q1.push(mp(f.second,f.first));
}
if(!q1.size())
{
pi f=q2.top();
q1.push(mp(f.second,f.first));
q2.pop();
}
pi f=q1.top();
q1.pop();
++ans[f.first];
a[f.first].push_back(bag[i].p);
q2.push(mp(bag[i].t+bag[i].s,f.first));
}
for(rg int i=1;i<=m;++i){
printf("%lld",ans[i]);
sort(a[i].begin(),a[i].end());
for(rg int j=0;j<a[i].size();++j) printf(" %lld",a[i][j]);
putchar('\n');
}
return 0;
}