#include <cstdio>
#include <cstring>
#define nmax 105
int n, l, A [nmax], B [nmax], a [nmax] [nmax] [nmax], b [nmax] [nmax] [nmax];
bool e [nmax] [nmax] [nmax];
void scan ()
{
int i;
scanf ("%d%d", &n, &l);
for (i=1; i <= n; ++i) scanf ("%d%d", &A [i], &B [i]);
}
inline int min (int a, int b)
{return (a<b)? a : b;}
bool ok (int w)
{
int i, j, k, v1, v2;
memset (a, 0, sizeof (a));
memset (b, 0, sizeof (b));
memset (e, 0, sizeof (e));
for (i=0; i <= n; ++i)
e [i] [0] [0]=true;
for (i=1; i <= n; ++i)
for (j=0; j <= l; ++j)
for (k=0; k <= l; ++k)
{
if (j+k == 0) continue;
//fprintf (stderr, "%d %d %d ", i, j, k);if (e [i-1] [j] [k]) fprintf (stderr, "1\n");
if (e [i-1] [j] [k])
{e [i] [j] [k]=true; a [i] [j] [k]=b [i] [j] [k]=0; continue;}
//fprintf (stderr, "!!!!!!!!");
v1=v2=w+1;
if (j != 0 && e [i] [j-1] [k])
if (a [i] [j-1] [k]+b [i] [j-1] [k]+A [i] <= w) v1=a [i] [j-1] [k] + b [i] [j-1] [k] + A [i];
if (k != 0 && e [i] [j] [k-1])
if (a [i] [j] [k-1]+b [i] [j] [k-1]+B [i] <= w) v2=a [i] [j] [k-1] + b [i] [j] [k-1] + B [i];
if (v1 < v2)
{
if (v1 <= w)
{
a [i] [j] [k]=a [i] [j-1] [k]+A [i];
b [i] [j] [k]=b [i] [j-1] [k];
e [i] [j] [k]=true;
}
}
else
{
if (v2 <= w)
{
a [i] [j] [k]=a [i] [j] [k-1];
b [i] [j] [k]=b [i] [j] [k-1]+B [i];
e [i] [j] [k]=true;
}
}
//printf ("%d %d %d %d %d\n", i, j, k, a [i] [j] [k], b [i] [j] [k]);
}
//fprintf (stderr, "%d %d %d\n", w, a [n] [l] [l], l);
return e [n] [l] [l];
}
int cbin ()
{
int i, s=1<<30;
for (i=0; s; s >>= 1)
if (!ok (i+s)) i+=s;
return i+1;
}
void print (int w, int x, int y)
{
if (w == 0) return;
int as, bs;
//fprintf (stderr, "%d %d %d %d %d\n", w, x, y, a [w] [x] [y], b [w] [x] [y]);
as=a [w] [x] [y]/A [w];
bs=b [w] [x] [y]/B [w];
print (w-1, x-as, y-bs);
printf ("%d %d\n", as, bs);
}
int main ()
{
freopen ("lapte.in", "r", stdin);
freopen ("lapte.out", "w", stdout);
scan ();
int x=cbin ();
printf ("%d\n", x);
ok (x);
print (n, l, l);
return 0;
}