#include <bits/stdc++.h>
using namespace std;
const int N=35;
int n,k;
int nums[N];
int a[N],b[N];
int as[N],bs[N];
int ans=0x3f3f3f3f;
int leng1,leng2;
bool cmp(int a,int b){
return a>b;
}
void dfs1(int step,int ed,int sum,int cnt) {
if(sum>k){
return;
}
if(step==ed+1){
a[++leng1]=sum;
as[leng1]=cnt;
return;
}
dfs1(step+1,ed,sum,cnt);
dfs1(step+1,ed,sum+nums[step],cnt);
dfs1(step+1,ed,sum+nums[step]/2,cnt+1);
}
void dfs2(int step,int ed,int sum,int cnt) {
if(sum>k){
return;
}
if(step==ed+1){
b[++leng2]=sum;
bs[leng2]=cnt;
return;
}
dfs2(step+1,ed,sum,cnt);
dfs2(step+1,ed,sum+nums[step],cnt);
dfs2(step+1,ed,sum+nums[step]/2,cnt+1);
}
int main() {
scanf("%d%d",&n,&k);
k*=2;
int mid=(n+1)>>1;
int q;
for(int i=1; i<=n; i++) {
scanf("%d",&q);
nums[i]=q*2;
}
dfs1(1,mid,0,0);
dfs2(mid+1,n,0,0);
sort(a+1,a+1+leng1);
for(int i=1;i<=leng2;i++){
if(b[i]>k){
continue;
}
int d=lower_bound(a+1,a+1+leng1,k-b[i])-a;
if(a[d]+b[i]==k){
ans=min(ans,as[d]+bs[i]);
}
}
if(ans==0x3f3f3f3f){
cout<<"-1"<<endl;
return 0;
}
cout<<ans<<endl;
return 0;
}