#include <bits/stdc++.h>
using namespace std;
int f[1000001];
int d[1000001];
int t[1000001];
int a[1000001],maxx=-1;
struct node
{
int f,d;
bool operator<(const node& a) const
{
return f<a.f;
}
};
priority_queue <node> q;
int main()
{
int n,h;
cin>>n>>h;
h*=60;
for(int i=1;i<=n;i++)
{
cin>>f[i];
q.push((node){f[i],i});
}
for(int i=1;i<=n;i++)
{
cin>>d[i];
}
for(int i=1;i<n;i++)
{
cin>>t[i];
}
for(int i=1;i<=n;i++)
{
while(!q.empty())
{
q.pop();
}
int sum=0;
int t1=h;
for(int j=1;j<i;j++)
t1-=t[j]*5;
for(int j=1;j<=i;j++)
q.push((node){f[i],d[i]});
while(t1>0&&q.top().f>0)
{
node m=q.top();
sum+=m.f;
q.pop();
m.f-=m.d;
q.push(m);
t1-=5;
}
maxx=max(maxx,sum);
}
cout<<maxx;
}