#include using namespace std; using bitst = bitset<100001>; int main() { int N, K; cin >> N >> K; vector A(N); for (int i = 0; i < N; ++i) cin >> A[i]; int B = sqrt(N), C = (N + B - 1) / B; vector memo_dpl(C); bitst dpl; dpl[0] = 1; for (int i = 0; i < N; ++i) { if (i % B == 0) memo_dpl[i / B] = dpl; dpl |= dpl << A[i]; } if (!dpl[K]) { puts("-1"); return 0; } bitst dpr; dpr[K] = 1; int ans = 0; for (int i = C - 1; i >= 0; --i) { vector memo(B); memo[0] = memo_dpl[i]; for (int j = 0; j < min(B, N - i * B) - 1; ++j) { memo[j + 1] = memo[j] | (memo[j] << A[i * B + j]); } for (int j = min(B, N - i * B) - 1; j >= 0; --j) { if ((memo[j] & dpr).none()) ++ans; dpr = dpr | (dpr >> A[i * B + j]); } } cout << ans << endl; }