#include using namespace std; int main() { int N, K; cin >> N >> K; vector A(N); for(int i = 0; i < N; i++) { cin >> A[i]; } array, 3> in; for(int msk = 1; msk < (1 << (N / 2)); msk++) { int cnt = __builtin_popcount(msk); for(int s = msk; s; s = (s - 1) & msk) { long long val = 0LL; int scnt = __builtin_popcount(s); for(int i = 0; i < N / 2; i++) { if(msk & (1 << i)) { if(s & (1 << i)) val += A[i]; else val -= A[i]; } } if(scnt == cnt) { in[1].insert(val); } else if(scnt == 0) { in[0].insert(val); } else { in[2].insert(val); } } long long val = 0LL; for(int i = 0; i < N / 2; i++) { if(msk & (1 << i)) val -= A[i]; } in[0].insert(val); } bool work = in[2].count(K); for(int msk = 1; msk < (1 << (N + 1) / 2); msk++) { int cnt = __builtin_popcount(msk); for(int s = msk; s; s = (s - 1) & msk) { long long val = 0LL; int scnt = __builtin_popcount(s); for(int i = 0; i < (N + 1) / 2; i++) { if(msk & (1 << i)) { if(s & (1 << i)) val += A[i + N / 2]; else val -= A[i + N / 2]; } } if(scnt == 0) { work |= in[1].count(K - val); work |= in[2].count(K - val); } else if(scnt == cnt) { work |= in[2].count(K - val); work |= in[0].count(K - val); } else { work |= (val == K); for(int i = 0; i < 3; i++) work |= (in[i].count(K - val)); } } long long val = 0LL; for(int i = 0; i < (N + 1) / 2; i++) { if(msk & (1 << i)) val -= A[i + N / 2]; } work |= in[2].count(K - val); work |= in[1].count(K - val); } if(work) cout << "Yes" << "\n"; else cout << "No" << "\n"; }