#include #include #include int main() { int64_t N, X; std::cin >> N >> X; std::vector V(N); std::vector W(N); for (int64_t &v : V) std::cin >> v; for (int64_t &w : W) std::cin >> w; std::vector>> dp(1, std::vector>(X + 1, {-1, -1, -1})); dp[0][0] = {0, -1, -1}; for (int i = N - 1; i >= 0; i--) { std::vector> ndp = dp.back(); for (int64_t w = X - W[i]; w >= 0; w--) { if (dp.back()[w][0] == -1) continue; if (dp.back()[w][0] + V[i] > ndp[w + W[i]][0] || dp.back()[w][0] + V[i] == ndp[w + W[i]][0] && ndp[w + W[i]][1] == i && dp.back()[w][1] > ndp[w + W[i]][2]) { ndp[w + W[i]] = {dp.back()[w][0] + V[i], i, dp.back()[w][1]}; } } dp.push_back(ndp); } std::vector result; for (int64_t w = X; w >= 0; w--) { if (dp.back()[w][0] == -1) continue; int target = dp.back()[w][1]; while (target != -1) { if (dp.back()[w][1] == target) { result.push_back(target + 1); target = dp.back()[w][2]; int64_t nw = w - W[dp.back()[w][1]]; w = nw; } dp.pop_back(); } break; } std::cout << result.size() << std::endl; for (int r : result) std::cout << r << ' '; std::cout << std::endl; }