#include <bits/stdc++.h>
FILE *in = fopen("lapte.in", "r"), *out = fopen("lapte.out", "w") ;
const int MV = 110 ;
const int INF = 1e9 ;
int dp[MV][MV], tata[MV][MV], ca[MV], cb[MV] ;
int sol[2][MV] ;
int n, l, q ;
bool verif(int time) {
int i, j, la, lb ;
for (i = 0 ; i <= n ; ++ i) {
for (j = 0 ; j <= l ; ++ j) {
dp[i][j] = -2 * INF ;
}
}
dp[0][0] = 0 ;
for (i = 1 ; i <= n ; ++ i)
for (la = 0 ; la <= time/ ca[i] ; ++ la)
for (j = 0 ; j <= l - la ; ++ j) {
lb = (time- ca[i] * la) / cb[i] ;
if (dp[i - 1][j] + lb > dp[i][j + la]) {
dp[i][j + la] = dp[i - 1][j] + lb ;
tata[i][j + la] = la ;
}
}
return dp[n][l] >= l ;
}
int main() {
int i, j ;
fscanf(in, "%d %d", &n, &l) ;
for (i = 1 ; i <= n ; i++)
fscanf(in, "%d %d", ca + i, cb + i) ;
int ans(0) ;
for (int step(1 << 7) ; step ; step >>= 1) {
if (!verif(ans + step)) {
ans |= step ;
}
}
fprintf(out, "%d\n", ans + 1) ;
verif(ans + 1) ;
i = n ;
j = l ;
while (i >= 0 && j >= 0) {
q = tata[i][j] ;
sol[0][i] = q ;
sol[1][i] = dp[i][j] - dp[i - 1][j - q] ;
i-- ;
j -= q ;
}
for (i = 1 ; i <= n ; i++)
fprintf(out, "%d %d\n", sol[0][i], sol[1][i]) ;
}