#include <bits/stdc++.h>
#define int long long
#define FILES freopen("lapte.in","r",stdin);\
freopen("lapte.out","w",stdout);
using namespace std;
struct bottle
{
int ma, mb, index;
};
int n,l,ansA[205],ansB[205];
vector<bottle> v;
bool cmp(bottle a,bottle b)
{
return a.mb < b.mb;
}
signed main()
{
FILES
cin >> n >> l;
for(int i = 1; i <= n; ++i)
{
int a,b;
cin >> a >> b;
v.push_back({a,b,i});
}
sort(v.begin(),v.end(),cmp);
int st = 1,dr = 1e9, ans = 0;
while(st <= dr)
{
int mid = (st + dr) >> 1;
int s1 = 0,s2 = 0;
for(int i = 0; i < v.size(); ++i)
s1 += mid / v[i].ma;
bool ok = 1;
for(int i = 0; i < v.size() && (s1 < l || s2 < l); ++i)
{
s2 += mid / v[i].mb;
s1 -= mid / v[i].ma;
int p1 = mid / v[i].mb;
if(s1 < l && s2 < l)
{
ok = 0;
break;
}
int timp = mid - p1 * v[i].mb;
if(s1 < l && s2 >= l)
{
int r = v[i].ma / v[i].mb + 1;
if(v[i].ma % v[i].mb == 0) r--;
for(int j = s2; j >= l; --j)
{
int h = timp + (s2 - j) * v[i].mb;
if(s1 + h / v[i].ma >= l)
{
s1 += h / v[i].ma;
int l = s2 - j;
s2 -= l;
break;
}
}
if(s1 < l || s2 < l)
{
ok = 0;
break;
}
break;
}
}
if(ok) dr = mid - 1, ans = mid;
else st = mid + 1;
}
cout << ans << '\n';
int s1 = 0,s2 = 0;
for(int i = 0; i < v.size(); ++i)
ansA[v[i].index] = ans / v[i].ma, s1 += ans / v[i].ma;
for(int i = 0; i < v.size() && (s1 < l || s2 < l); ++i)
{
ansA[v[i].index] = 0;
ansB[v[i].index] = ans / v[i].mb;
int p1 = ans / v[i].mb;
s2 += ans / v[i].mb;
s1 -= ans / v[i].ma;
int timp = ans - p1 * v[i].mb;
if(s1 < l && s2 >= l)
{
int r = v[i].ma / v[i].mb + 1;
if(v[i].ma % v[i].mb == 0) r--;
for(int j = s2; j >= l; --j)
{
int h = timp + (s2 - j) * v[i].mb;
if(s1 + h / v[i].ma >= l)
{
s1 += h / v[i].ma;
ansA[v[i].index] += h / v[i].ma;
int l = s2 - j;
s2 -= l;
ansB[v[i].index] -= l;
break;
}
}
break;
}
}
for(int i = 1; i <= n; ++i)
cout << ansA[i] << ' '<< ansB[i] << '\n';
}