#include <cstdio>
#include <algorithm>
using namespace std;
FILE *f, *g;
int n, mk;
struct beutor
{
int a, b, tleft, luatb, luata, i;
int afb, afa;
};
beutor v[109];
void readFile()
{
f = fopen("lapte.in", "r");
fscanf(f, "%d%d", &n, &mk);
int i;
for(i = 1; i <= n; i ++)
fscanf(f, "%d%d", &v[i].a, &v[i].b), v[i].i = i;
fclose(f);
}
bool pos(int t)
{
///v[i].c = cat a castigam daca pierdem un b
int i, a = 0, b = 0;
for(i = 1; i <= n; i ++)
{
b += t / v[i].b;
v[i].luatb = t / v[i].b;
v[i].tleft = t % v[i].b;
a += v[i].tleft / v[i].a;
v[i].luata = v[i].tleft / v[i].a;
v[i].tleft %= v[i].a;
}
// printf("%d \n", t);
if(a >= mk && b >= mk)
return 1;
// printf("%d \n", t);
int aa = a;
int ab = b;
for(i = 1; i <= n; i ++)
{
// printf("%d %d %d %d %d\n", i, v[i].a, v[i].b, a, b);
int cl = v[i].tleft;
b -= v[i].luatb;
v[i].tleft += v[i].luatb * v[i].b;
a += v[i].tleft / v[i].a;
v[i].tleft %= v[i].a;
b += v[i].tleft / v[i].b;
v[i].tleft %= v[i].b;
// printf("%d %d %d %d %d\n", i, v[i].a, v[i].b, a, b);
if(a >= mk && b >= mk)
return 1;
// printf("%d \n", t);
if(b < mk)
{
if(a >= mk)
{
b = ab;
a = aa;
int j;
for(j = 1; j <= v[i].luatb; j ++)
{
v[i].tleft = cl;
b -= j;
v[i].tleft += j * v[i].b;
a += v[i].tleft / v[i].a;
v[i].tleft %= v[i].a;
b += v[i].tleft / v[i].b;
v[i].tleft %= v[i].b;
if(a >= mk && b >= mk)
return 1;
}
return 0;
}
}
aa = a;
ab = b;
}
return 0;
}
int cautBin()
{
int i = 0;
int pas = 1 << 7;
while(pas != 0)
{
if(pos(i + pas) == 0)
i += pas;
pas /= 2;
}
return i + 1;
}
bool cmp(beutor c, beutor d)
{
return (c.b * d.a > c.a * d.b);
}
int rez;
void solve()
{
sort(v + 1, v + n + 1, cmp);
rez = cautBin();
}
bool cmpi(beutor a, beutor b)
{
return a.i < b.i;
}
void printAll()
{
sort(v + 1, v + n + 1, cmpi);
int i;
for(i = 1; i <= n; i ++)
fprintf(g, "%d %d\n", v[i].afa, v[i].afb);
}
void afis(int t)
{
//printf("AFISAM\n");
///v[i].c = cat a castigam daca pierdem un b
int i, a = 0, b = 0;
for(i = 1; i <= n; i ++)
{
b += t / v[i].b;
v[i].luatb = t / v[i].b;
v[i].tleft = t % v[i].b;
v[i].afb = t / v[i].b;
a += v[i].tleft / v[i].a;
v[i].luata = v[i].tleft / v[i].a;
v[i].afa = v[i].luata;
v[i].tleft %= v[i].a;
}
// printf("%d \n", t);
if(a >= mk && b >= mk)
{
printAll();
return;
}
// printf("%d \n", t);
int aa = a;
int ab = b;
for(i = 1; i <= n; i ++)
{
int oldb = v[i].afb;
int olda = v[i].afa;
// printf("%d %d %d %d %d\n", i, v[i].a, v[i].b, a, b);
int cl = v[i].tleft;
v[i].afb = 0;
b -= v[i].luatb;
v[i].tleft += v[i].luatb * v[i].b;
a += v[i].tleft / v[i].a;
v[i].afa += v[i].tleft / v[i].a;
v[i].tleft %= v[i].a;
b += v[i].tleft / v[i].b;
v[i].afb += v[i].tleft / v[i].b;
v[i].tleft %= v[i].b;
// printf("%d %d %d %d %d\n", i, v[i].a, v[i].b, a, b);
if(a >= mk && b >= mk)
{
printAll();
return;
}
// printf("%d \n", t);
if(b < mk)
{
if(a >= mk)
{
b = ab;
a = aa;
v[i].afb = oldb;
v[i].afa = olda;
int j;
for(j = 1; j <= v[i].luatb; j ++)
{
v[i].tleft = cl;
b -= j;
v[i].afb -= j;
v[i].tleft += j * v[i].b;
a += v[i].tleft / v[i].a;
v[i].afa += v[i].tleft / v[i].a;
v[i].tleft %= v[i].a;
b += v[i].tleft / v[i].b;
v[i].afb += v[i].tleft / v[i].b;
v[i].tleft %= v[i].b;
if(a >= mk && b >= mk)
{
printAll();
return;
}
}
return ;
}
}
aa = a;
ab = b;
}
return ;
}
void printFile()
{
g = fopen("lapte.out", "w");
fprintf(g, "%d\n", rez);
afis(rez);
fclose(g);
}
int main()
{
readFile();
solve();
printFile();
return 0;
}