#DFS典型例题题目链接
#include<bits/stdc++.h>
using namespace std;
int hp,number_sum,number_min;
pair<int,int>a[22];
bool b[22];
void dfs(int hp_res,int number)
{
if(number>number_sum) return ;
if(number>number_min) return ;
if(number<number_min&&hp_res<=0)
{number_min=number; return ;}
for(int i=0;i<number_sum;i++)
{
if(!b[i])
{
b[i]=true;
if(hp_res<=a[i].second)
dfs(hp_res-2*a[i].first,number+1);
else dfs(hp_res-a[i].first,number+1);
b[i]=false;
}
}
}
int main()
{
while(cin>>number_sum>>hp)
{
for(int i=0;i<number_sum;i++)
{
cin>>a[i].first>>a[i].second;
b[i]=false;
}
number_min=INT_MAX;
dfs(hp,0);
if(number_min>number_sum) cout<<"-1"<<endl;
else cout<<number_min<<endl;
}
return 0;
}