#include <cstdio>
#define DIM 128
#define INF 65536
using namespace std;
int N, L, left, right, middle, D[DIM][DIM], T[DIM][DIM], A[DIM], B[DIM], qA[DIM], qB[DIM];
bool getVerif (int time) {
for (int i = 1; i <= N; i ++)
for (int j = 0; j <= L; j ++) {
D[i][j] = -INF;
for (int k = j; k >= 0; k --)
if (A[i] * (j - k) <= time)
if (D[i][j] < D[i-1][k] + (time - A[i] * (j - k)) / B[i]) {
D[i][j] = D[i-1][k] + (time - A[i] * (j - k)) / B[i];
qA[i] = j - k;
qB[i] = (time - A[i] * (j - k)) / B[i];
T[i][j] = k;
}
}
if (D[N][L] >= L)
return 1;
else
return 0;
}
void DFS (int line, int column) {
if (line != 1)
DFS (line - 1, T[line][column]);
printf ("%d %d\n", qA[line], qB[line]);
return;
}
int main () {
freopen ("lapte.in" ,"r", stdin );
freopen ("lapte.out","w", stdout);
scanf ("%d %d", &N, &L);
for (int i = 1; i <= N; i ++)
scanf ("%d %d", &A[i], &B[i]);
for (int i = 1; i < DIM; i ++)
D[0][i] = -INF;
left = 1; right = 20;
while (left <= right) {
middle = left + (right - left) / 2;
if (getVerif(middle))
right = middle - 1;
else
left = middle + 1;
}
getVerif (left);
printf ("%d\n", left);
DFS (N, L);
return 0;
}