#include<bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>

using namespace std;
using namespace __gnu_pbds;

using u128 = __uint128_t;

#define int long long
#define idxSet tree<int, null_type,less_equal<int>, rb_tree_tag,tree_order_statistics_node_update>
#define atIdx find_by_order
#define idxOf order_of_key
#define MOD 1000000007
#define MAX 200005
#define endl '\n'

#define v(type) vector<type>
#define p(type1, type2) pair<type1 , type2>
typedef pair<int, int> ii;
typedef vector<int> vi;
typedef vector<ii> vii;

int dp[MAX];

void solve() {
    int n, h;
    cin >> n >> h;
    int maxi = 0;
    vii d(n);
    for (int i = 0; i < n; i++) {
        cin >> d[i].first >> d[i].second;
        maxi = max(maxi, d[i].first);
    }
    vi mx;
    for (int i = 0; i < n; i++) {
        if(d[i].second > maxi)
            mx.push_back(d[i].second);
    }
    sort(mx.begin() , mx.end() , greater<int>() );
    for(int i = 1 ; i < mx.size() ; i++){
        mx[i] += mx[i-1];
    }
    auto it = lower_bound(mx.begin() , mx.end() , h);
    if(it != mx.end()){
        cout<<(it - mx.begin()) + 1;
    }else {
//        int attacks = mx.size();
//        h -= mx[mx.size() - 1];
//        attacks += h / maxi + (h % maxi == 0 ? 0 : 1);
//        cout<<attacks<<endl;
            cout<<"alpha"<<endl;
    }



}


int32_t main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int t = 1;
    //cin>>t;
    while (t--)
        solve();
    return 0;
}