#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=2e5+5;
int read(){int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch<='9'&&ch>='0')x=(x<<3)+(x<<1)+ch-'0',ch=getchar();return x*f;}
int n,m;
struct seg{
int mi[N<<2],laz[N<<2],ans;
#define ls now<<1
#define rs now<<1|1
#define mid ((l+r)>>1)
#define lo l,mid,ls
#define ro mid+1,r,rs
inline void pd(int now){
mi[ls]=max(0ll,mi[ls]-laz[now]);
mi[rs]=max(0ll,mi[rs]-laz[now]);
laz[ls]+=laz[now];
laz[rs]+=laz[now];
laz[now]=0ll;
}
int query(int l,int r,int now,int s){
if(l==r)return mi[now]+=s,l;
pd(now);
if(mi[ls]==mi[now])ans=query(lo,s);
else ans=query(ro,s);
mi[now]=min(mi[ls],mi[rs]);
return ans;
}
}T;
vector<int>g[N];
struct ll{int s,t,id;}a[N];
signed main(){
n=read();m=read();
for(int i=1;i<=n;i++)a[i].s=read(),a[i].t=read(),a[i].id=i;
sort(a+1,a+1+n,[](ll a,ll b){return a.t<b.t;});
for(int i=1;i<=n;i++){
T.mi[1]-=(a[i].t-a[i-1].t);
T.laz[1]+=(a[i].t-a[i-1].t);
T.mi[1]=max(0ll,T.mi[1]);
g[T.query(1,n,1,a[i].s)].push_back(a[i].id);
}
for(int i=1;i<=m;i++){
printf("%lld ",g[i].size());
sort(g[i].begin(),g[i].end());
for(auto v:g[i])printf("%lld ",v);
puts("");
}
return 0;
}