#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("lapte.in");
ofstream fout("lapte.out");
int d[105][105], a[105], b[105], n, l, p[105][105];
struct gigi
{
int x, y;
}v[105];
int verif(int timp)
{
for (int i = 0; i <= n; i++)
for (int j = 0; j <= l; j++)
d[i][j] = -100000000;
d[0][0] = 0;
for (int i = 1; i <= n; i++)
for (int j = 0; j <= l; j++)
for (int k = 0; a[i] * k <= timp && k <= j; k++)
if (d[i][j] < d[i - 1][j - k] + (timp - k * a[i]) / b[i])
{
d[i][j] = d[i - 1][j - k] + (timp - k * a[i]) / b[i];
p[i][j] = j - k;
}
if (d[n][l] >= l)
return 1;
return 0;
}
int main()
{
fin >> n >> l;
for (int i = 1; i <= n; i++)
fin >> b[i] >> a[i];
int st = 0, dr = 105, tret = 0;
while (st <= dr)
{
int mij = (st + dr) / 2;
if (verif(mij))
{
tret = mij;
dr = mij - 1;
}
else
st = mij + 1;
}
fout << tret << '\n';
if (verif(tret));
int x = n, y = l, nr = 0;
while (x != 0 || y != 0)
{
int q = p[x][y];
v[++nr].x = d[x][y] - d[x - 1][q];
v[nr].y = y - q;
x--;
y = q;
}
for (int i = nr; i >= 1; i--)
fout << v[i].x << ' ' << v[i].y << '\n';
return 0;
}