#include <iostream>
#include <algorithm>
using namespace std;
const int maxn=30;
int n,V,maxvalue=0; //物品件数n,背包容量V
int w[maxn],c[maxn]; //w[i]为每件物品的重量,c[i]为每件物品的价值
/*void DFS(int index,int sumw,int sumc)//index为当前处理物品的编号,sumw,sumc分别为当前总重量和总价值
{
if(index==n)
{
if(sumw<=V&&sumc>maxvalue)
maxvalue=sumc;
return ;
}
//岔道口
DFS(index+1,sumw,sumc);//不拿第index+ 1件物品
DFS(index+1,sumw+w[index],sumc+c[index]); //拿第index件物品
}*/
//剪枝后的DFS
void DFS(int index,int sumw,int sumc)
{
if(index==n)
return ;//已完成对n件物品的选择
DFS(index+1,sumw,sumc);//不选第index件物品
if(sumw+w[index]<=V)
{
if(sumc+c[index]>maxvalue)
maxvalue=sumc+c[index];//更新最大值
DFS(index+1,sumw+w[index],sumc+c[index]); //选第index件物品
}
}
int main()
{
scanf("%d%d",&n,&V);
for(int i=0;i<n;++i)
scanf("%d",&w[i]);
for(int i=0;i<n;++i)
scanf("%d",&c[i]);
DFS(0,0,0);//初始对第0件物品、当前总重量,当前总价值均为0
printf("%d\n",maxvalue);
return 0;
}