#include using namespace std; constexpr int MAX_S = 200000; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int T; cin >> T; while (T--) { int N, S; cin >> N >> S; bitset dp; // dp[S - x] = 1 ⇔ 部分和 x を作れる dp[S] = 1; // dp の最初に立っているビット size_t first = S; for (int i = 0; i < N; ++i) { int a; cin >> a; // 既に S を作れる場合、それ以上の更新は不要 if (first == 0) { continue; } // Ai は正なので、a > S の要素は使用できない if (a > S) { continue; } bitset added = dp >> a; // GNU libstdc++ の拡張機能 first = min(first, added._Find_first()); dp |= added; } cout << S - static_cast(first) << '\n'; } return 0; }