RT
#include <bits/stdc++.h>
using namespace std;
long long n, k, ans = 0x3f3f3f3f;
double s, a[31];
map <double, pair <long long, long long> > maps;
void dfs(long long x, double sum, long long num){
if (sum > s){
return;
}
if (x >= n >> 1){
maps[sum] = {1, num};
return;
}
dfs(x + 1, sum + a[x], num);
dfs(x + 1, sum + a[x] / 2, num + 1);
dfs(x + 1, sum, num);
return;
}
void dfs2(long long x, double sum, long long num){
if (sum > s || num > ans){
return;
}
if (x > n){
if (maps[s - sum].first){
ans = min(ans, maps[s - sum].second + num);
}
return;
}
dfs2(x + 1, sum + a[x], num);
dfs2(x + 1, sum + a[x] / 2, num + 1);
dfs2(x + 1, sum, num);
return;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> n >> s;
for (int i = 1; i <= n; i++){
cin >> a[i];
}
dfs(1, 0, 0);
dfs2(n >> 1, 0, 0);
if (ans == 0x3f3f3f3f){
cout << "-1";
} else {
cout << ans;
}
return 0;
}