import std; void main() { long N, K; readf("%d %d\n", N, K); auto A = readln.chomp.split.to!(long[]); long H = N / 2; long[long] L, R; L[0] = R[0] = 1; long l; foreach (i; 0 .. H) { long[long] nxt; nxt[0] = L[0]; foreach (key, val; L) { foreach (j; [-1, 1]) { nxt[key+A[i]*j] += val; } } l += A[i]; L = nxt; } foreach (a; l == 0 ? [0L] : [-l, 0L, l]) { --L[a]; if (L[a] == 0) L.remove(a); } long r; foreach (i; H .. N) { long[long] nxt; nxt[0] = R[0]; foreach (key, val; R) { foreach (j; [-1, 1]) { nxt[key+A[i]*j] += val; } } r += A[i]; R = nxt; } foreach (a; r == 0 ? [0L] : [-r, 0L, r]) { --R[a]; if (R[a] == 0) R.remove(a); } L.writeln; R.writeln; bool isOK; foreach (key; L.byKey) { if (key + K in R) isOK = true; if (key - K in R) isOK = true; } writeln(isOK ? "Yes" : "No"); }