## https://yukicoder.me/problems/no/1861 def main(): N, K = map(int, input().split()) A = list(map(int ,input().split())) # そもそも存在する? dp = [[0] * (K + 1) for _ in range(N + 1)] dp[0][0] = 1 for i in range(N): a = A[i] for x in range(K + 1): if x + a <= K: dp[i + 1][x + a] |= dp[i][x] dp[i + 1][x] |= dp[i][x] if dp[-1][K] == 0: print(-1) return answer = 0 dp0 = [0] * (K + 1) dp0[0] = 1 for i in reversed(range(N)): is_ok = True for k in range(K + 1): k0 = K - k if dp0[k] == 1 and dp[i][k0] == 1: is_ok = False if is_ok: answer += 1 a = A[i] new_dp = dp0.copy() for x in range(K + 1): if x + a <= K: new_dp[x + a] |= dp0[x] dp0 = new_dp print(answer) if __name__ == "__main__": main()