#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m;
struct node{
int s,t,id;
}s[320010];
struct no{
int ti,id;
};
bool operator <(no a,no b){
return a.ti>b.ti;
}
bool cmp(node a,node b){
return a.t<b.t;
}
priority_queue<no> q2;
priority_queue<int, vector<int>, greater<int>> q;
vector <int> g[320010];
signed main(){
cin>>n>>m;
for (int i=1;i<=n;i++){
cin>>s[i].s>>s[i].t;
s[i].id=i;
}
sort(s+1,s+n+1,cmp);
for (int i=1;i<=m;i++){
q.push(i);
}
for(int i=1;i<=n;i++){
while((!q2.empty()) && q2.top().ti<=s[i].t){
q.push(q2.top().id);
q2.pop();
}
if(q.empty()){
int u=q2.top().id;
int ti=q2.top().ti;
q2.pop();
g[u].push_back(s[i].id);
q2.push((no){ti+s[i].s,u});
}
else{
int u=q.top();
g[u].push_back(s[i].id);
q.pop();
q2.push((no){s[i].s+s[i].t,u});
}
}
for (int i=1;i<=m;i++){
cout<<g[i].size()<<' ';
sort(g[i].begin(),g[i].end());
for (int j=0;j<g[i].size();j++){
cout<<g[i][j]<<' ';
}
cout<<endl;
}
return 0;
}