#include <bits/stdc++.h>
using namespace std;
ifstream f("lapte.in");
ofstream g("lapte.out");
int N,L,T,st,dr,CB[104][104],CA[104][104],SB,SA,tim;
struct viteza
{
int vA,vB,ind;
}Lapte[101];
struct consum
{
int c1,c2;
}Final[101];
void inter(int x,int m,int y)
{
int i=x,j=m+1,k=x-1;
struct aux
{
int A,B,poz;
}A_lapte[101];
while(i<=m&&j<=y)
{
if(Lapte[i].vB<=Lapte[j].vB)
{
A_lapte[++k].B=Lapte[i].vB;
A_lapte[k].A=Lapte[i].vA;
A_lapte[k].poz=Lapte[i].ind;
i++;
if(Lapte[i].vA==Lapte[i].vB) j++;
}
else
{
A_lapte[++k].B=Lapte[j].vB;
A_lapte[k].A=Lapte[j].vA;
A_lapte[k].poz=Lapte[j].ind;
j++;
}
}
while(i<=m)
{
A_lapte[++k].B=Lapte[i].vB;
A_lapte[k].A=Lapte[i].vA;
A_lapte[k].poz=Lapte[i].ind;
i++;
}
while(j<=y)
{
A_lapte[++k].B=Lapte[j].vB;
A_lapte[k].A=Lapte[j].vA;
A_lapte[k].poz=Lapte[j].ind;
j++;
}
for(int cnt=x;cnt<=k;cnt++)
{
Lapte[cnt].vB=A_lapte[cnt].B;
Lapte[cnt].vA=A_lapte[cnt].A;
Lapte[cnt].ind=A_lapte[cnt].poz;
}
}
void sortare(int start,int stop)
{
if(start<stop)
{
int mij=(start+stop)/2;
sortare(start,mij);
sortare(mij+1,stop);
inter(start,mij,stop);
}
}
int main()
{
f>>N>>L;
for(int i=1;i<=N;i++)
f>>Lapte[i].vA,f>>Lapte[i].vB,Lapte[i].ind=i;
sortare(1,N);
st=0; dr=101;
while(st<dr)
{
int mij=(st+dr)/2; SB=SA=0;
for(int i=1;i<=N&&SB<L;i++)
{
int tot=mij/Lapte[i].vB;
int rest=L-SB;
if(rest<=tot) CB[mij][i]=rest;
else CB[mij][i]=tot;
SB+=CB[mij][i];
}
for(int i=1;i<=N&&SA<L;i++)
{
int tot=(mij-(CB[mij][i]*Lapte[i].vB))/Lapte[i].vA;
CA[mij][i]=tot;
SA+=CA[mij][i];
}
if(SA>=L&&SB>=L)
{
dr=mij-1,tim=mij;
for(int i=1;i<=N;i++)
{
if(CA[mij][i]) Final[Lapte[i].ind].c1=CA[mij][i];
else Final[Lapte[i].ind].c1=0;
if(CB[mij][i]) Final[Lapte[i].ind].c2=CB[mij][i];
else
Final[Lapte[i].ind].c2=0;
}
}
else
st=mij+1;
}
g<<tim<<'\n';
for(int i=1;i<=N;i++)
g<<Final[i].c1<<" "<<Final[i].c2<<'\n';
return 0;
}