#include <cstdio>
#include <cstring>
#define MAXL 100
int dp[MAXL+1][2*MAXL+1],next[MAXL+1][2*MAXL+1];
int ta[MAXL+1],tb[MAXL+1];
int ansa[MAXL+1],ansb[MAXL+1];
inline int getmax(int a,int b){
if(a<b) return b;
return a;
}
inline char cauta(int t,int n,int l){
int i,ans,j,k;
memset(dp,-1,sizeof(dp));
dp[0][0]=0;
for(i=1;i<=n;i++)
for(j=0;j<=2*l;j++)
for(k=0;k<=j&&t-k*ta[i]>=0;k++)
if(dp[i-1][j-k]>=0&&dp[i][j]<dp[i-1][j-k]+(t-k*ta[i])/tb[i]){
dp[i][j]=dp[i-1][j-k]+(t-k*ta[i])/tb[i];
next[i][j]=j-k;
}
ans=0;
for(i=l;i<=2*l;i++)
if(dp[n][i]>=l)
ans=i;
return ans;
}
FILE*fi,*fout;
void print(int l,int c,int t){
if(l==0)
return ;
ansa[l]=c-next[l][c];
ansb[l]=(t-ansa[l]*ta[l])/tb[l];
print(l-1,next[l][c],t);
}
int main(){
int i,n,l,c,rez,pas;
fi=fopen("lapte.in" ,"r");
fout=fopen("lapte.out" ,"w");
fscanf(fi,"%d %d " ,&n,&l);
for(i=1;i<=n;i++)
fscanf(fi,"%d %d " ,&ta[i],&tb[i]);
rez=0;
for(pas=1<<8;pas;pas>>=1)
if(cauta(rez+pas,n,l)==0)
rez+=pas;
rez++;
c=cauta(rez,n,l);
fprintf(fout,"%d\n" ,rez);
print(n,c,rez);
for(i=1;i<=n;i++)
fprintf(fout,"%d %d\n" ,ansa[i],ansb[i]);
fclose(fi);
fclose(fout);
return 0;
}