#include <bits/stdc++.h>
using namespace std;
ifstream fin("lapte.in");
ofstream fout("lapte.out");
int n,l;
struct da
{
int a,b;
}v[103];
int dp[203];
bool cautb(int x)
{
for (int i=1;i<=2*l;i++)
dp[i]=-1;
dp[0]=0;
for (int i=1;i<=n;i++)
{
//alegem cat lapteA a baut deja
for (int lapteA=2*l;lapteA>=0;lapteA--)
{
//alegem cat lapte sa mai bea
int Max=min(x/v[i].a,lapteA);
for (int j=0;j<=Max;j++)
{
if (dp[lapteA-j]==-1) continue;
int lapteB=(x-j*v[i].a)/v[i].b;
dp[lapteA]=max(dp[lapteA],dp[lapteA-j]+lapteB);
}
}
}
for (int i=l;i<=2*l;i++)
if (dp[i]>=l) return 1;
return 0;
}
int dpf[103][203];
da rez[103];
int main()
{
fin>>n>>l;
for (int i=1;i<=n;i++)
fin>>v[i].a>>v[i].b;
int st=0,dr=100,x=0;
while (st<=dr)
{
int mij=((st+dr)>>1);
if (cautb(mij)) dr=mij-1,x=mij;
else st=mij+1;
}
fout<<x<<'\n';
for (int j=0;j<=n;j++)
for (int i=1;i<=2*l;i++)
dpf[j][i]=-1;
dpf[0][0]=0;
for (int i=1;i<=n;i++)
{
//alegem cat lapteA a baut deja
for (int lapteA=2*l;lapteA>=0;lapteA--)
{
//alegem cat lapte sa mai bea
int Max=min(x/v[i].a,lapteA);
for (int j=0;j<=Max;j++)
{
if (dpf[i-1][lapteA-j]==-1) continue;
int lapteB=(x-j*v[i].a)/v[i].b;
dpf[i][lapteA]=max(dpf[i][lapteA],dpf[i-1][lapteA-j]+lapteB);
}
}
}
int solA=0,solB=0;
for (int i=l;i<=2*l && solA==0;i++)
if (dpf[n][i]>=l) solA=i,solB=dpf[n][i];
for (int i=n;i>=1;i--)
{
int Max=min(x/v[i].a,solA);
for (int j=0;j<=Max;j++)
{
if (dpf[i-1][solA-j]==-1) continue;
int lapteB=(x-j*v[i].a)/v[i].b;
if (dpf[i][solA]==dpf[i-1][solA-j]+lapteB)
{
solA-=j;
solB-=lapteB;
rez[i]={j,lapteB};
break;
}
}
}
for (int i=1;i<=n;i++)
fout<<rez[i].a<<" "<<rez[i].b<<'\n';
return 0;
}