#include<bits/stdc++.h>
using namespace std;


void solve_knapsnack(){
    
    int N;
    int W;
    
    if(!(cin>>N>>W)) return;
    
    vector<int> weight(N);
    for(int i=0;i<N;++i){
        cin>>weight[i];
    }
    
    vector<int> values(N);
    for(int i=0;i<N;++i){
        cin>>values[i];
    }
    
    vector<int> dp(W+1,0);
    
    for(int i=0;i<N;++i){
        int current_weight = weight[i];
        int current_value = values[i];
        for(int w=W;w>=current_weight;--w){
           dp[w] = max(dp[i],current_value+dp[w-current_weight]);
        }
    }
   
    int max_val = max(dp[W]);
    
    cout<<fixed<<setprecision(2)<<(double)max_value<<endl;
}
int main(){
    solve_knapsnack();
    return 0;
}