CSES - Shared codeLink to this code: https://cses.fi/paste/53a3b5135a0320522945fd/
#include <bits/stdc++.h>
using namespace std;

int z  = 1e9 + 7;

void solve(){
     int n,x;cin>>n>>x;
     int price[n],page[n];
     for(int i=0;i<n;i++) cin>>price[i];
     for(int i=0;i<n;i++) cin>>page[i];


     vector<vector<int>> dp(n+1,vector<int>(x+1,0));
     vector<vector<int>> dp_page(n+1,vector<int>(x+1,0));
    
     for(int i=0;i<=n;i++) dp[i][0] = 1;
     int mx = 0;
     for(int i=1;i<=n;i++){
        for(int j=1;j<=x;j++){
            if(j-price[i-1]>=0){
                if(dp[i-1][j-price[i-1]]){
                    dp_page[i][j] = max(dp_page[i][j],dp_page[i-1][j-price[i-1]]) + page[i-1];
                    dp[i][j] = 1;
                }
            }
            if(dp[i-1][j]){
                dp_page[i][j] = max(dp_page[i][j],dp_page[i-1][j]);
                dp[i][j] = 1;
            }
            mx = max(mx,dp_page[i][j]);
        }
     }
     cout << mx;
}

int main(){
    ios_base::sync_with_stdio(0) ;
    cin.tie(0) ; cout.tie(0) ;
    cout.precision(20);
    int T=1;//cin>>T;
    while(T--){
        solve();
        if(T)cout << endl;
    }
    return 0;
}