import sys def solve(N, W, v, w): """ N: 品物の数 W: 重量制限 v: 価値リスト (長さ N) w: 重さリスト (長さ N) 戻り値: 選択された品物の 1-based インデックスリスト """ # dp[i][j] = (最大価値, 次に選ばれた状態の i index) dp = [[(0, None) for _ in xrange(W+1)] for _ in xrange(N+1)] # 後ろから DP テーブルを埋める for i in xrange(N-1, -1, -1): vi = v[i] wi = w[i] dpi1 = dp[i+1] dpi = dp[i] # 重さが足りない場合はスキップ(選ばない) for j in xrange(wi): dpi[j] = dpi1[j] # 重さを使える場合は選ぶ or 選ばないを比較 for j in xrange(wi, W+1): val_skip, nxt_skip = dpi1[j] val_take = dpi1[j-wi][0] + vi if val_skip >= val_take: dpi[j] = (val_skip, nxt_skip) else: dpi[j] = (val_take, i+1) # トレースバック ans = [] idx = dp[0][W][1] rem = W while idx is not None: ans.append(idx) rem -= w[idx-1] idx = dp[idx][rem][1] return ans def main(): data = sys.stdin.read().split() it = iter(data) # Python2 では it.next() を使う N = int(it.next()) W = int(it.next()) v = [int(it.next()) for _ in xrange(N)] w = [int(it.next()) for _ in xrange(N)] ans = solve(N, W, v, w) # 出力 out = [] out.append(str(len(ans))) if ans: out.append(" ".join(map(str, ans))) sys.stdout.write("\n".join(out)) if __name__ == "__main__": main()