#include<fstream>
#include<algorithm>
using namespace std;
#define max_n 100010
ifstream f("garaj.in");
ofstream g("garaj.out");
int n , m , st , dr , mid , i , t_min;
int T[max_n] , C[max_n] , V[max_n];
void read(){
f>>n>>m;
for( int i = 1 ; i <= n ; i++ )
f>>C[i]>>T[i];
}
bool pos( int t ){
int S = 0;
for( int i = 1 ; i <= n ; i++ ){
S += (t / (2*T[i])) * C[i];
if( S >= m )
return 1;
}
return 0;
}
bool cmp( int a , int b ){
return a > b;
}
int main(){
read();
st = 1; dr = (m / C[1] + 1) * 2 * T[1];
mid = (st + dr) / 2;
while( st <= dr ){
if( pos(mid) ){
t_min = mid;
dr = mid - 1;
}
else
st = mid + 1;
mid = (st + dr) / 2;
}
for( int i = 1 ; i <= n ; i++ ){
V[i] = (t_min / (2*T[i])) * C[i];
}
sort(V + 1 , V + n + 1 , cmp);
int s = 0 , i = 1;
while( s < m ){
s += V[i];
i++;
}
g<<t_min<<" "<<i-1;
return 0;
}