#include<cstdio>
#include<vector>
using namespace std;
const int nmax=105;
const int inf=1e9;
typedef pair<int,int> ii;
ii st[nmax];
int top,n,L;
int dp[nmax][nmax],mm[nmax][nmax],a[nmax],b[nmax];
inline bool check(int val)
{
int i,j,k;
for(i=0;i<=n;++i)
for(j=0;j<=L;++j)
dp[i][j]=-inf,mm[i][j]=0;
for(i=1,dp[0][0]=0;i<=n;i++)
for(j=0;j<=L;++j)
for(k=0;k<=j;++k)
if(val - (j-k)*a[i] >= 0 && dp[i][j] < dp[i-1][k] + (val - (j-k)*a[i])/b[i])
dp[i][j] = dp[i-1][k] + (val - (j-k)*a[i])/b[i],mm[i][j]=k;
return dp[n][L] >= L;
}
inline void findsol(int x)
{
check(x);
int i,j,k;
for(i=n,j=L,k=0;i;j=k,--i)
k=mm[i][j],st[i].first = j-k,st[i].second = dp[i][j] - dp[i-1][k];
for(i=1;i<=n;++i)
printf("%d %d\n",st[i].first,st[i].second);
}
int main()
{
freopen("lapte.in","r",stdin);
freopen("lapte.out","w",stdout);
int i,j;
scanf("%d%d",&n,&L);
for(i=1;i<=n;++i)
scanf("%d%d",&a[i],&b[i]);
int step;
for(step=1;step<10000;step<<=1);
for(i=10000;step;step>>=1)
if(check(i-step))
i-=step;
printf("%d\n",i);
findsol(i);
return 0;
}