#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;
#define FOR(i,a,b) for (int i=(a);i<=(b);i++)
#define N 101
const int oo=(int)1e9;
int n,l,a[N],b[N],dp[N][N],lo,hi,mid,ans,pre[N][N],ansa[N],ansb[N];
void open(){
freopen("lapte.in","r",stdin);
freopen("lapte.out","w",stdout);
}
void input(){
scanf("%d%d",&n,&l);
FOR(i,1,n){
scanf("%d%d",&a[i],&b[i]);
}
}
bool ok(int x){
FOR(i,0,n){
FOR(j,0,l){
dp[i][j]=-oo;
}
}
dp[0][0]=0;
FOR(i,1,n){
dp[i][0]=0;
FOR(j,0,l){
FOR(k,0,j){
int ta,tb;
ta=k*a[i];
if (ta>x) break;
tb=(x-ta)/b[i];
if (dp[i-1][j-k]!=-oo){
int val=dp[i-1][j-k]+tb;
if (dp[i][j]<val){
dp[i][j]=val;
pre[i][j]=k;
}
}
}
}
}
return dp[n][l]>=l;
}
void solve(){
lo=0;hi=50000;
while (1){
mid=(lo+hi)>>1;
if (ok(mid)){
ans=mid;
hi=mid-1;
}
else lo=mid+1;
if (lo>hi) break;
}
ok(ans);
printf("%d\n",ans);
int nx,ny;
ny=l;
for (int i=n;i>=1;i--){
ansa[i]=pre[i][ny];
ansb[i]=(ans-pre[i][ny]*a[i])/b[i];
ny=ny-pre[i][ny];
}
FOR(i,1,n){
printf("%d %d\n",ansa[i],ansb[i]);
}
}
int main(){
open();
input();
solve();
//system("pause");
return 0;
}