#include<bits/stdc++.h>
using namespace std;
bool comp(vector<int> a, vector<int> b) {
return a[0] > b[0];
}
/*
优先用最大面额的钞票填m,但是不填满
然后用最小的填,填满
*/
int compute(vector<vector<int>> &money, int m) {
int res = 0, remain = m;
int i = 0;
while(i<money.size() && money[i][0]>=m) {
res += money[i][1];
money[i][1] = 0;
i++;
}
money.erase(money.begin(), money.begin()+i);
while(true) {
for(int j=0; j<money.size(); j++)
if(money[j][1] == 0)
money.erase(money.begin()+j);
if(money.empty()) return res;
i = 0;
while(remain>=money[i][0] && i<money.size()) {
if(money[i][1]>0) {
remain -= money[i][0];
money[i][1]--;
while(remain<money[i][0]
&& i<money.size())
i++;
} else {
i++;
}
}
i = money.size()-1;
while(remain>0 && i>=0) {
if(money[i][1] > 0) {
remain -= money[i][0];
money[i][1]--;
} else {
i--;
}
}
if(remain <= 0) {
remain = m;
res++;
}
}
}
int main() {
int n, m;
cin>>n>>m;
vector<vector<int>> money;
for(int i=0; i<n; i++) {
vector<int> vec;
for(int i=0; i<2; i++) {
int x; cin>>x;
vec.push_back(x);
}
money.push_back(vec);
}
sort(money.begin(), money.end(), comp);
cout<<compute(money, m);
}