Cod sursa(job #546061)
#include<cstdio>
#include<algorithm>
using namespace std;
struct lps
{
int a,b,nro;
};
const int N=105;
lps v[N];
int n,L,ba[N],bb[N];
bool comp(const lps &A,const lps &B)
{
return A.a-A.b<B.a-B.b;
}
void read()
{
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",&v[i].a,&v[i].b), v[i].nro=i;
sort(v+1,v+n+1,comp);
}
inline int min(int x,int y)
{
return x<y?x:y;
}
bool verif(int t)
{
int la=0,lb=0;
for(int i=1;i<=n;i++)
{
int ma=min(L-la,t/v[i].a);
la+=ma;
lb+=(t-ma*v[i].a)/v[i].b;
}
if(la>=L && lb>=L)
return true;
return false;
}
int cb()
{
int pas=(1<<20),i=0;
for(i=0;pas;pas>>=1)
if(!verif(i+pas))
i+=pas;
return i+1;
}
void solve(int t)
{
int la=0,lb=0;
for(int i=1;i<=n;i++)
{
int ma=min(L-la,t/v[i].a);
la+=ma;
lb+=(t-ma*v[i].a)/v[i].b;
ba[i]=ma;
bb[i]=(t-ma*v[i].a)/v[i].b;
}
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(v[j].nro==i)
printf("%d %d\n",ba[j],bb[j]);
}
int main()
{
read();
int tmin=cb();
printf("%d\n",tmin);
solve(tmin);
return 0;
}