#include #include using namespace std; using namespace atcoder; //const long nPrime = 1000000007; //const long nPrime = 998244353; typedef long long ll; int main() { long n,k; cin >> n >> k; vector viA(n); for(long i = 0; i < n; i++){ cin >> viA[i]; } vector> vviDP(n+1,vector(k+1,0)); vviDP[0][0] = 1; for(long i = 0; i < n; i++){ for(long j = 0; j <= k; j++){ vviDP[i+1][j] |= vviDP[i][j]; } for(long j = 0; j+viA[i] <= k; j++){ vviDP[i+1][j+viA[i]] |= vviDP[i][j]; } } if(vviDP[n][k] == 0){ cout << -1 << endl; return 0; } vector> vviDPBack(n+1,vector(k+1,0)); vviDPBack[0][0] = 1; for(long i = 0; i < n; i++){ for(long j = 0; j <= k; j++){ vviDPBack[i+1][j] |= vviDPBack[i][j]; } for(long j = 0; j+viA[n-i-1] <= k; j++){ vviDPBack[i+1][j+viA[n-i-1]] |= vviDPBack[i][j]; } } long nAns = n; for(long i = 0; i < n; i++){ for(long j = 0; j <= k; j++){ if(vviDP[i][j] == 1 && vviDPBack[n-1-i][k-j] == 1){ nAns--; break; } } } cout << nAns << endl; return 0; }