#include<iostream>#include<cstring>#include<algorithm>#include<vector>#definexfirst#defineysecond
using namespace std;typedeflonglong LL;typedef pair<int,int> PII;constint N =35;int n, m, tn, t;int w[N];int res =50;
PII alls[1<<21];voiddfs_1(int u, LL s,int cnt){if(s > m)return;if(u == tn){
alls[t ++]={s, cnt};return;}dfs_1(u +1, s, cnt);dfs_1(u +1, s + w[u], cnt);dfs_1(u +1, s + w[u]/2, cnt +1);}voiddfs_2(int u, LL s,int cnt){if(s > m || cnt >= res)return;if(u == n){int l =0, r = t -1;while(l < r){int mid = l + r >>1;if(alls[mid].x + s >= m)
r = mid;else
l = mid +1;}if(alls[l].x + s == m)
res =min(res, alls[l].y + cnt);return;}dfs_2(u +1, s, cnt);dfs_2(u +1, s + w[u], cnt);dfs_2(u +1, s + w[u]/2, cnt +1);}intmain(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> n >> m, m *=2;for(int i =0; i < n;++ i )
cin >> w[i], w[i]*=2;sort(w, w + n);
tn =max(0, n /2-2);dfs_1(0,0,0);sort(alls, alls + t);int k =1;for(int i =1; i < t;++ i )if(alls[i].x != alls[i -1].x)
alls[k ++]= alls[i];
t = k;dfs_2(tn,0,0);
cout <<(res ==50?-1: res)<< endl;return0;}