import sys import pypyjit # 短いテストケースが多数あっても、ループを早期に JIT コンパイルさせる。 pypyjit.set_param( "threshold=1," "function_threshold=1," "trace_eagerness=1," "trace_limit=100000," "inlining=1," "decay=0" ) def solve() -> None: data = list(map(int, sys.stdin.buffer.read().split())) pos = 0 t = data[pos] pos += 1 answers = [""] * t case = 0 while case < t: n = data[pos] s = data[pos + 1] pos += 2 end = pos + n # bit i == 1 <=> 部分和 i が作れる reachable = 1 # 現在到達可能な最大値 hi = 0 mask = (1 << (s + 1)) - 1 while pos < end: a = data[pos] pos += 1 # Ai > S は正整数なので絶対に使用できない if a > s: continue # 単独で S を作れる if a == s: hi = s pos = end break new_hi = hi + a if new_hi <= s: # この場合、S より上の bit は発生しないので # 高コストな & mask を省略できる reachable |= reachable << a hi = new_hi if hi == s: pos = end break else: reachable = (reachable | (reachable << a)) & mask hi = reachable.bit_length() - 1 # S に到達した時点で答えは確定 if hi == s: pos = end break answers[case] = str(hi) case += 1 sys.stdout.write("\n".join(answers)) if __name__ == "__main__": solve()