import java.io.*;
import java.util.*;
class Solution {
static class State {
long s;
int last;
int steps;
State(long s, int last, int steps) { this.s = s; this.last = last; this.steps = steps; }
}
public static int Solve
(int N,
String Xstr, List
<Integer
> A
) { long X
= Long.
parseLong(Xstr
); for (int v : A) if (v == X) return 0;
Set<Long> targets = new HashSet<>();
long maxTarget
= Long.
MIN_VALUE; for (int v : A) {
long t = X - v;
targets.add(t);
if (t > maxTarget) maxTarget = t;
}
HashMap
<Long, ArrayList
<Integer
>> posMap
= new HashMap
<>(); for (int i = 0; i < N; ++i) {
long val = A.get(i);
posMap.computeIfAbsent(val, k -> new ArrayList<>()).add(i);
}
ArrayDeque<State> q = new ArrayDeque<>();
HashMap
<Long, BitSet
> visited
= new HashMap
<>(); final int NONE_IDX = N;
q.add(new State(0L, -1, 0));
bs0.set(NONE_IDX);
visited.put(0L, bs0);
while (!q.isEmpty()) {
State cur = q.poll();
long curS = cur.s;
int curLast = cur.last;
int curSteps = cur.steps;
for (int j = 0; j < N; ++j) {
if (j == curLast) continue;
long newS = 2L * curS + A.get(j);
if (newS > maxTarget) continue;
long needed = X - newS;
ArrayList<Integer> positions = posMap.get(needed);
if (positions != null && !positions.isEmpty()) return curSteps + 1;
BitSet bs
= visited.
get(newS
); int idxToSet = j;
if (bs == null) {
bs.set(idxToSet);
visited.put(newS, bs);
q.add(new State(newS, j, curSteps + 1));
} else if (!bs.get(idxToSet)) {
bs.set(idxToSet);
q.add(new State(newS, j, curSteps + 1));
}
}
}
return -1;
}
public static void main
(String[] args
) { Scanner scan
= new Scanner
(System.
in); int N
= Integer.
parseInt(scan.
nextLine().
trim()); String X
= scan.
nextLine().
trim(); List<Integer> A = new ArrayList<>();
for (int i
= 0; i
< N
; i
++) A.
add(Integer.
parseInt(scan.
nextLine().
trim())); System.
out.
println(Solve
(N, X, A
)); }
}
aW1wb3J0IGphdmEuaW8uKjsKaW1wb3J0IGphdmEudXRpbC4qOwoKIGNsYXNzIFNvbHV0aW9uIHsKICAgIHN0YXRpYyBjbGFzcyBTdGF0ZSB7CiAgICAgICAgbG9uZyBzOwogICAgICAgIGludCBsYXN0OwogICAgICAgIGludCBzdGVwczsKICAgICAgICBTdGF0ZShsb25nIHMsIGludCBsYXN0LCBpbnQgc3RlcHMpIHsgdGhpcy5zID0gczsgdGhpcy5sYXN0ID0gbGFzdDsgdGhpcy5zdGVwcyA9IHN0ZXBzOyB9CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBpbnQgU29sdmUoaW50IE4sIFN0cmluZyBYc3RyLCBMaXN0PEludGVnZXI+IEEpIHsKICAgICAgICBsb25nIFggPSBMb25nLnBhcnNlTG9uZyhYc3RyKTsKICAgICAgICBmb3IgKGludCB2IDogQSkgaWYgKHYgPT0gWCkgcmV0dXJuIDA7CgogICAgICAgIFNldDxMb25nPiB0YXJnZXRzID0gbmV3IEhhc2hTZXQ8PigpOwogICAgICAgIGxvbmcgbWF4VGFyZ2V0ID0gTG9uZy5NSU5fVkFMVUU7CiAgICAgICAgZm9yIChpbnQgdiA6IEEpIHsKICAgICAgICAgICAgbG9uZyB0ID0gWCAtIHY7CiAgICAgICAgICAgIHRhcmdldHMuYWRkKHQpOwogICAgICAgICAgICBpZiAodCA+IG1heFRhcmdldCkgbWF4VGFyZ2V0ID0gdDsKICAgICAgICB9CgogICAgICAgIEhhc2hNYXA8TG9uZywgQXJyYXlMaXN0PEludGVnZXI+PiBwb3NNYXAgPSBuZXcgSGFzaE1hcDw+KCk7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyArK2kpIHsKICAgICAgICAgICAgbG9uZyB2YWwgPSBBLmdldChpKTsKICAgICAgICAgICAgcG9zTWFwLmNvbXB1dGVJZkFic2VudCh2YWwsIGsgLT4gbmV3IEFycmF5TGlzdDw+KCkpLmFkZChpKTsKICAgICAgICB9CgogICAgICAgIEFycmF5RGVxdWU8U3RhdGU+IHEgPSBuZXcgQXJyYXlEZXF1ZTw+KCk7CiAgICAgICAgSGFzaE1hcDxMb25nLCBCaXRTZXQ+IHZpc2l0ZWQgPSBuZXcgSGFzaE1hcDw+KCk7CiAgICAgICAgZmluYWwgaW50IE5PTkVfSURYID0gTjsKCiAgICAgICAgcS5hZGQobmV3IFN0YXRlKDBMLCAtMSwgMCkpOwogICAgICAgIEJpdFNldCBiczAgPSBuZXcgQml0U2V0KE4gKyAxKTsKICAgICAgICBiczAuc2V0KE5PTkVfSURYKTsKICAgICAgICB2aXNpdGVkLnB1dCgwTCwgYnMwKTsKCiAgICAgICAgd2hpbGUgKCFxLmlzRW1wdHkoKSkgewogICAgICAgICAgICBTdGF0ZSBjdXIgPSBxLnBvbGwoKTsKICAgICAgICAgICAgbG9uZyBjdXJTID0gY3VyLnM7CiAgICAgICAgICAgIGludCBjdXJMYXN0ID0gY3VyLmxhc3Q7CiAgICAgICAgICAgIGludCBjdXJTdGVwcyA9IGN1ci5zdGVwczsKCiAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgTjsgKytqKSB7CiAgICAgICAgICAgICAgICBpZiAoaiA9PSBjdXJMYXN0KSBjb250aW51ZTsKICAgICAgICAgICAgICAgIGxvbmcgbmV3UyA9IDJMICogY3VyUyArIEEuZ2V0KGopOwogICAgICAgICAgICAgICAgaWYgKG5ld1MgPiBtYXhUYXJnZXQpIGNvbnRpbnVlOwoKICAgICAgICAgICAgICAgIGxvbmcgbmVlZGVkID0gWCAtIG5ld1M7CiAgICAgICAgICAgICAgICBBcnJheUxpc3Q8SW50ZWdlcj4gcG9zaXRpb25zID0gcG9zTWFwLmdldChuZWVkZWQpOwogICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9ucyAhPSBudWxsICYmICFwb3NpdGlvbnMuaXNFbXB0eSgpKSByZXR1cm4gY3VyU3RlcHMgKyAxOwoKICAgICAgICAgICAgICAgIEJpdFNldCBicyA9IHZpc2l0ZWQuZ2V0KG5ld1MpOwogICAgICAgICAgICAgICAgaW50IGlkeFRvU2V0ID0gajsKICAgICAgICAgICAgICAgIGlmIChicyA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgYnMgPSBuZXcgQml0U2V0KE4gKyAxKTsKICAgICAgICAgICAgICAgICAgICBicy5zZXQoaWR4VG9TZXQpOwogICAgICAgICAgICAgICAgICAgIHZpc2l0ZWQucHV0KG5ld1MsIGJzKTsKICAgICAgICAgICAgICAgICAgICBxLmFkZChuZXcgU3RhdGUobmV3UywgaiwgY3VyU3RlcHMgKyAxKSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFicy5nZXQoaWR4VG9TZXQpKSB7CiAgICAgICAgICAgICAgICAgICAgYnMuc2V0KGlkeFRvU2V0KTsKICAgICAgICAgICAgICAgICAgICBxLmFkZChuZXcgU3RhdGUobmV3UywgaiwgY3VyU3RlcHMgKyAxKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAtMTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgU2Nhbm5lciBzY2FuID0gbmV3IFNjYW5uZXIoU3lzdGVtLmluKTsKICAgICAgICBpbnQgTiA9IEludGVnZXIucGFyc2VJbnQoc2Nhbi5uZXh0TGluZSgpLnRyaW0oKSk7CiAgICAgICAgU3RyaW5nIFggPSBzY2FuLm5leHRMaW5lKCkudHJpbSgpOwogICAgICAgIExpc3Q8SW50ZWdlcj4gQSA9IG5ldyBBcnJheUxpc3Q8PigpOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSBBLmFkZChJbnRlZ2VyLnBhcnNlSW50KHNjYW4ubmV4dExpbmUoKS50cmltKCkpKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oU29sdmUoTiwgWCwgQSkpOwogICAgfQp9Cg==