#include <bits/stdc++.h>
using namespace std;
ofstream g ("lapte.out");
int dp[110][110],n,l,i,in,sf,mid,ans[110][110],j,k,nr;
pair<int,int>v[110];
void sol(int N,int L)
{
g<<ans[N][L]<<" "<<(mid-v[N].first*ans[N][L])/v[N].second<<'\n';
if(N-1)sol(N-1, L-ans[N][L]);
}
int main()
{
ifstream f ("lapte.in");
f>>n>>l;
for(i=n; i>=1; --i)
f>>v[i].first>>v[i].second;
in=1;
sf=100;
while(in<=sf)
{
mid=(in+sf)/2;
memset(dp,-20010,sizeof(dp));
dp[0][0]=0;
for(i=1; i<=n; ++i)
for(j=0; j<=l&&j<=mid/v[i].first; ++j)
for(k=0; k<=l-j; ++k)
{
nr=dp[i-1][k]+(mid-j*v[i].first)/v[i].second;
if(dp[i][k+j]<nr)
{
dp[i][k+j]=nr;
ans[i][k+j]=j;
}
}
if(dp[n][l]>=l)sf=mid-1;
else in=mid+1;
}
g<<in<<'\n';
mid=in;
memset(dp,-20010,sizeof(dp));
dp[0][0]=0;
for(i=1; i<=n; ++i)
for(j=0; j<=l&&j<=mid/v[i].first; ++j)
for(k=0; k<=l-j; ++k)
{
nr=dp[i-1][k]+(mid-j*v[i].first)/v[i].second;
if(dp[i][k+j]<nr)
{
dp[i][k+j]=nr;
ans[i][k+j]=j;
}
}
sol(n,l);
return 0;
}