#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std;
const int maxn=20;
struct bag{
int w;
int v;
int p;
bool operator <(const bag &B) const{
if(p!=B.p) return p>B.p; ///!!!!!
}
};
bag b[maxn];
int main(int argc, char** argv) {
int n,v;
scanf("%d%d",&n,&v);
for(int i=0;i<n;i++){
scanf("%d",&b[i].w);
}
for(int i=0;i<n;i++){
scanf("%d",&b[i].v);
b[i].p=b[i].v/b[i].w;
}
sort(b,b+n);
// int index=0,ans=0;
// while(index<n && v>0){
// if(v>=b[index].w){
// ans+=b[index].v;
// v-=b[index].w;
// }
// else v=0;
// index++;
// }
int ans=0;
for(int i=0;i<n;i++){
if(v>=b[i].w){
ans+=b[i].v;
v-=b[i].w;
}
}
printf("%d\n",ans);
return 0;
}
#include <stdio.h>
#include <algorithm>
using namespace std;
const int maxn=20;
struct bag{
int w;
int v;
int p;
bool operator <(const bag &B) const{
if(p!=B.p) return p>B.p; ///!!!!!
}
};
bag b[maxn];
int main(int argc, char** argv) {
int n,v;
scanf("%d%d",&n,&v);
for(int i=0;i<n;i++){
scanf("%d",&b[i].w);
}
for(int i=0;i<n;i++){
scanf("%d",&b[i].v);
b[i].p=b[i].v/b[i].w;
}
sort(b,b+n);
// int index=0,ans=0;
// while(index<n && v>0){
// if(v>=b[index].w){
// ans+=b[index].v;
// v-=b[index].w;
// }
// else v=0;
// index++;
// }
int ans=0;
for(int i=0;i<n;i++){
if(v>=b[i].w){
ans+=b[i].v;
v-=b[i].w;
}
}
printf("%d\n",ans);
return 0;
}