#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("garaj.in");
ofstream fout("garaj.out");
struct
{
int timp;
int cantitate;
} v[100001];
long long n, m, a[100001];
long long cateSticle(long long t)
{
long long r=0;
for (int i=1; i <= n; i++)
{
r+=(t/v[i].timp)*v[i].cantitate;
if (r>=m) break;
}
return r;
}
long long cb(int m)
{
long long st = 1, dr=m*m, mij;
while(st <= dr)
{
mij = (st+dr)/2;
long long s =cateSticle(mij);
if (s<m)
{
st=mij+1;
}
else
{
dr = mij-1;
}
}
return st;
}
int main()
{
fin >> n >> m;
for (int i=1; i <= n; i++)
{
fin >> v[i].cantitate >> v[i].timp;
v[i].timp *= 2;
}
int t = cb(m);
fout << t << ' ';
for (int i=1; i<=n; i++)
{
a[i] =(t/v[i].timp)*v[i].cantitate;
}
sort(a+1, a+n+1, greater<int>());
int s=0;
for (int i=1; i <= n; i++)
{
m-=a[i];
s++;
if(m<=0)
break;
}
fout<< s;
return 0;
}