Cod sursa(job #314595)
#include<cstdio>
#include<algorithm>
using namespace std ;
#define IN "garaj.in","r",stdin
#define OUT "garaj.out","w",stdout
#define ll long long
#define Pair pair<int,int>
#define x first
#define y second
int N, M ;
Pair V[100020];
int raport[100020];
int cmp(const int& a, const int& b)
{
if (a > b)
return 1;
return 0;
}
int cec(int t)
{
ll sum = 0;
for(int i = 1; i <= N ; ++i)
sum += (ll)V[i].x * (t / V[i].y);
if(sum >= M)
return 1;
return 0;
}
int main()
{
freopen(IN);
freopen(OUT);
scanf("%d%d",&N,&M);
for(int i = 1 ; i <= N ; ++i)
{
scanf("%d%d",&V[i].x,&V[i].y);
V[i].y *= 2;
}
int min = 2000000000;
int st = 1 , dr = 2000000000, m ;
while(st <= dr)
{
m = ((ll)st + dr) / 2;
// printf("%d\n", m);
if(cec(m) == 1)
{
dr = m - 1;
min = m;
}
else
st = m + 1 ;
}
printf("%d ",min);
int i;
for (i = 1; i <= N; ++i)
raport[i] = (ll)(min / V[i].y) * V[i].x;
sort(raport + 1 , raport + 1 + N, cmp);
int s = 0 , E = 1;
while(s < M)
s += raport[E++];
printf("%d\n",E - 1);
return 0;
}