#include <iostream>
#include <fstream>
using namespace std;
ifstream in ("lapte.in");
ofstream out ("lapte.out");
int a[111], b[111], c[111][111], v[111][111], ver[111][111], sol[111], n, l, p, q, t, i, j, k, lmax, x, nr, soltimp;
int main()
{
in >> n >> l;
for (i = 1; i <= n; i++)
{
in >> a[i] >> b[i];
}
q = 101;
p = 0;
while (p + 1 < q)
{
t = p + (q - p) / 2;
for (i = 0; i <= 101; i++)
for (j = 0; j <= 101; j++)
{
c[i][j] = 0;
v[i][j] = 0;
ver[i][j] = 0;
}
for (i = 0; i <= t / a[1]; i++)
{
c[1][i] = (t - i * a[1]) / b[1];
v[1][i] = i;
ver[1][i] = 1;
}
for (i = 2; i <= n; i++)
{
for (j = 0; j <= l; j++)
{
lmax = -1;
nr = 0;
for (k = 0; k <= j; k++)
{
if (a[i] * k <= t)
{
x = (t - k * a[i]) / b[i];
if (c[i - 1][j - k] + x > lmax && ver[i-1][j-k] == 1)
{
lmax = c[i - 1][j - k] + x;
nr = k;
}
}
else break;
}
c[i][j] = lmax;
v[i][j] = nr;
if (lmax == -1)
ver[i][j] = 0;
else
ver[i][j] = 1;
}
}
if (c[n][l] >= l)
{
soltimp = t;
k = l;
for (i = n; i >= 0; i--)
{
sol[i] = v[i][k];
k -= v[i][k];
}
q = t;
}
else
p = t;
}
out << soltimp << "\n";
for (i = 1; i <= n; i++)
{
out << sol[i] << " ";
x = (soltimp - sol[i] * a[i]) / b[i];
out << x << "\n";
}
in.close();
out.close();
return 0;
}