#include static inline constexpr std::vector solve(const uint_fast32_t N, const uint_fast32_t W, const std::vector& v, const std::vector& w) noexcept { std::vector> dp(N + 1, std::vector(W + 1, 0)); for (uint_fast32_t i = N - 1; i != UINT_LEAST32_MAX; --i) { for (uint_fast32_t j = 0; j != w[i]; ++j) dp[i][j] = dp[i + 1][j]; for (uint_fast32_t j = w[i]; j <= W; ++j) dp[i][j] = std::max(dp[i + 1][j], dp[i + 1][j - w[i]] + v[i]); } std::vector ans; ans.reserve(N); for (uint_fast32_t i = 0, j = W; i != N; ++i) if (dp[i][j] != dp[i + 1][j]) ans.push_back(i + 1), j -= w[i]; return ans; } static inline void output(const std::vector& ans) noexcept { std::cout << ans.size() << '\n' << ans[0]; for (uint_fast32_t i = 1; i != ans.size(); ++i) std::cout << ' ' << ans[i]; std::cout << '\n'; } int main() { std::cin.tie(nullptr); std::ios::sync_with_stdio(false); uint_fast32_t N, W, i; std::cin >> N >> W; std::vector v(N), w(N); for (i = 0; i != N; ++i) std::cin >> v[i]; for (i = 0; i != N; ++i) std::cin >> w[i]; output(solve(N, W, v, w)); return 0; }