#include<bits/stdc++.h>
#define INF 100000
using namespace std;
int n,v,a[31],b[31],ans=INF,ga,gb;
bool c[31];
void dfs(int k){
if(ga+gb>=v) ans=min(ans,abs(ga-gb));
if(ans==0) return;
for(int i=k;i<=n;i++)if(c[i]==0){
c[i]=1;
ga+=a[i];
gb+=b[i];
dfs(i+1);
ga-=a[i];
gb-=b[i];
c[i]=0;
}
}
int main(){
scanf("%d%d",&n,&v);
for(int i=1;i<=n;i++) scanf("%d%d",&a[i],&b[i]);
for(int i=1;i<=n;i++){
c[i]=1;
dfs(0);
c[i]=0;
}
if(ans!=INF) cout<<ans<<endl;
else cout<<-1<<endl;
}
/*60分
#include<bits/stdc++.h>
#define INF 100000
using namespace std;
int n,v,a[3100],b[3100],ans=INF;
bool c[3100],f;
void dfs(int x,int y){
if(x+y>=v){
f=1;
ans=min(ans,abs(x-y));
}
if(ans==0){
return;
}
for(int i=1;i<=n;i++){
if(c[i]==0){
c[i]=1;
dfs(x+a[i],y+b[i]);
c[i]=0;
}
}
}
int main(){
scanf("%d%d",&n,&v);
for(int i=1;i<=n;i++) scanf("%d%d",&a[i],&b[i]);
for(int i=1;i<=n;i++){
c[i]=1;
dfs(a[i],b[i]);
c[i]=0;
}
if(f) cout<<ans<<endl;
else cout<<-1<<endl;
}
*/
/*20分
#include<bits/stdc++.h>
#define INF 100000
using namespace std;
int n,v,a[3100],b[3100],ans=INF;
bool c[3100],f;
void dfs(int x,int y,int sum){
if(x+y>=v){
f=1;
sum=abs(x-y);
ans=min(ans,sum);
}
for(int i=1;i<=n;i++){
if(c[i]==0){
c[i]=1;
dfs(x+a[i],y+b[i],sum+a[i]+b[i]);
c[i]=0;
}
}
}
int main(){
scanf("%d%d",&n,&v);
for(int i=1;i<=n;i++) scanf("%d%d",&a[i],&b[i]);
for(int i=1;i<=n;i++){
c[i]=1;
dfs(a[i],b[i],a[i]+b[i]);
c[i]=0;
}
if(f) cout<<ans<<endl;
else cout<<-1<<endl;
}
*/