import sys def solve(): data = sys.stdin.read().split() it = iter(data) N = int(next(it)) W = int(next(it)) v = [int(next(it)) for _ in range(N)] w = [int(next(it)) for _ in range(N)] # dp[i][j] = max value using items i..N-1 with capacity j dp = [[0] * (W + 1) for _ in range(N + 1)] for i in range(N - 1, -1, -1): wi = w[i] vi = v[i] cur = dp[i] nxt = dp[i + 1] # j < wi: can't take item i for j in range(wi): cur[j] = nxt[j] # j >= wi: decide take or skip for j in range(wi, W + 1): without = nxt[j] with_item = nxt[j - wi] + vi cur[j] = with_item if with_item > without else without # reconstruct chosen items ans = [] j = W for i in range(N): if dp[i][j] != dp[i + 1][j]: ans.append(i + 1) # 1-based index j -= w[i] # output out = [str(len(ans))] if ans: out.append(" ".join(map(str, ans))) sys.stdout.write("\n".join(out)) if __name__ == "__main__": solve()