#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 100
#define fr(i,a,b) for(int i=a;i<b;++i)
#define rf(i,a,b) for(int i=b-1;i>=a;--i)
#define min(a,b) a<b?a:b
struct v{int a,b,i;
bool operator <(const v &c){return c.a-c.b<a-b;}
}a[N];
int c(const void*a,const void*b){return (*(v*)a)<(*(v*)b);}
int ci(const void*a,const void*b){return (*(v*)a).i-(*(v*)b).i;}
int main(){
freopen("lapte.in","r",stdin);
freopen("lapte.out","w",stdout);
int n,m;
scanf("%i%i",&n,&m);
fr(i,0,n)scanf("%i%i",&a[i].a,&a[i].b),a[i].i=i;
qsort(a,n,sizeof(v),c);
int l=0,r=2*N*m,x,y,t[N],c;
while(l<=r){
x=y=m,c=(l+r)/2;
memset(t,0,sizeof(t));
fr(i,0,n) x-=t[i]=min(x,c/a[i].a);
rf(i,0,n) y-=min(y,(c-t[i]*a[i].a)/a[i].b);
if(l==r)break;
x||y?l=c+1:r=c;
}
printf("%i\n",l);
fr(i,0,n)a[i].b=(l-t[i]*a[i].a)/a[i].b,a[i].a=t[i];
qsort(a,n,sizeof(v),ci);
fr(i,0,n)printf("%i %i\n",a[i].a,a[i].b,a[i].i);
return 0;
}