#include <iostream>
#include <cstdio>
#define MAXN 120
#define inf 0x3f3f3f3f
using namespace std;
int n, L, rez;
int a[MAXN], b[MAXN];
int din[MAXN][MAXN], t[MAXN][MAXN];
void read()
{
scanf("%d %d", &n, &L);
for (int i = 1; i <= n; i++)
scanf("%d %d", &a[i], &b[i]);
}
int check(int timp)
{
for (int i = 1; i <= L+1; i++) din[0][i] = -inf;
for (int i = 1; i <= n; i++) {
for (int j = 0; j <= L; j++) {
din[i][j] = -inf;
for (int k = j; k >= 0; k--) {
if (timp < a[i]*(j-k)) continue;
int np = din[i-1][k] + (timp-a[i]*(j-k))/b[i];
if (np > din[i][j]) {
din[i][j] = np;
t[i][j] = k;
}
}
}
}
return (din[n][L] >= L);
}
void traseu(int i, int j)
{
if (i > 1)
traseu(i-1, t[i][j]);
printf("%d %d\n", j-t[i][j], (rez-a[i]*(j-t[i][j]))/b[i]);
}
void solve()
{
int step, timp;
step = 64, timp = 100;
for (step; step; step >>= 1) {
if (timp - step >= 0 && check(timp-step))
timp -= step;
}
rez = timp;
printf("%d\n", rez);
check(rez);
traseu(n, L);
}
int main()
{
freopen("lapte.in", "r", stdin);
freopen("lapte.out", "w", stdout);
read();
solve();
return 0;
}