//WA //1番Wが小さいやつを採用 #include #include #include using namespace std; using namespace atcoder; using ll = long long; //#define endl "\n"; const long long INF = 1000000000000000000; ll N, W, v[3009], w[3009]; ll dp[3009][3009]; int main(){ cin >> N >> W; for(int i = 1; i <= N; i++) cin >> v[i]; for(int i = 1; i <= N; i++) cin >> w[i]; for(int i = 0; i <= N; i++){ for(int j = 0; j <= W; j++) dp[i][j] = -INF; } dp[N][0] = 0; for(int i = N; i >= 1; i--){ for(int j = 0; j <= W; j++){ dp[i - 1][j] = max(dp[i - 1][j], dp[i][j]); if(j + w[i] <= W){ dp[i - 1][j + w[i]] = max(dp[i - 1][j + w[i]], dp[i][j] + v[i]); } } } ll maxval = 0; ll pos = 0; for(int i = 0; i <= W; i++){ if(maxval < dp[0][i]){ maxval = dp[0][i]; pos = i; } } vector ans; for(int i = 0; i < N; i++){ if(dp[i][pos] == dp[i + 1][pos]){ continue; }else{ ans.push_back(i + 1); pos -= w[i + 1]; } } cout << ans.size() << endl; for(auto p: ans) cout << p << " "; cout << endl; return 0; }