//1.从上到下刚刚好凑够。
//2.1不行就从下到上超过c
#include<iostream>
#include<algorithm>#include<cstring>
using namespace std;
#define INF 1000000000
int n,c,use[22];
pair<int,int> a[22];
int main(){
int ans,x,y;
while(cin>>n>>c){
ans = 0;
for(int i = 0;i<n;++i){
cin>>x>>y;
a[i].first = x;
a[i].second = y;
}
sort(a,a+n);
for(int i = n-1;i>=0;--i){
if(a[i].first>=c){
ans += a[i].second;
a[i].second = 0;
}
}
while(1){
int flag = 0;
int tmp = c;
memset(use, 0, sizeof(use));
for(int i = n - 1; i >= 0; i--) {
if(a[i].second)
{
int k = tmp / a[i].first;
int mi = min(a[i].second, k);
tmp -= mi * a[i].first;
use[i] = mi;
if(tmp == 0)
{
flag = 1;
break;
}
}
}
if(tmp > 0)
{
for(int i = 0; i < n; i++)
if(a[i].second > use[i])
{
while(use[i] < a[i].second)
{
tmp -= a[i].first;
use[i]++;
if(tmp <= 0)
{
flag = 1;
break;
}
}
if(tmp <= 0) break;
}
}
if(!flag) break;
int mx = INF;
for(int i = n-1;i>=0;--i)
if(use[i])
mx = min(mx,a[i].second/use[i]);
ans += mx;
for(int i = n-1;i>=0;--i){
if(use[i])
a[i].second -= mx*use[i];
}
}
cout<<ans<<endl;
}
return 0;
}