#include<bits/stdc++.h>
using namespace std;
int n,h;
int f[30],s[30],d[30];
int dis[30][1010];
int main()
{
cin>>n>>h;
h=h*12;
for(int i=1;i<=n;i++)
cin>>f[i];
for(int i=1;i<=n;i++)
cin>>d[i];
for(int i=2;i<=n;i++)
cin>>s[i];
for(int i=1;i<=n;i++)
{
int x=0;
if(d[i])
{
int y;//循环次数
y=f[i]/d[i];
if(f[i]%d[i]!=0)
y+=1;
for(int j=1;j<=y;j++)
{
x+=f[i]-d[i]*(j-1);
for(int z=h;z>=j+s[i];z--)
{
dis[i][z]=max(dis[i][z],dis[i-1][z-s[i]-j]+x);
}
}
}
else
for(int j=s[i]+1;j<=h;j++) //把d[i]等于零的看作完全背包分开求解
dis[i][j]=max(dis[i][j],dis[i-1][j-s[i]-1]+f[i]*j);
}
for(int i=1;i<=n;i++) //求答案
for(int j=i+1;j<=n;j++)
if(dis[i][h]>dis[j][h])
swap(dis[i][h],dis[j][h]);
cout<<dis[n][h]<<endl;
}```