#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
const int N = 30;
int n, h, ans = 0;
int f[N], d[N], t[N];
int main() {
cin >> n >> h;
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 >> t[i];
h = h * 60;
int wk = 0;
int v = 0;
for (int i = 1; i <= n; i++) {
wk += t[i]*5;
int now = h - wk;
v = 0;
if (now <= 0)break;
struct node {
int val, num;
int is_f;
bool operator<(const node a)const {
return val < a.val;
}
};
priority_queue<node>s;
for (int j = 1; j <= i; j++) {
s.push({ f[j],j,1 });
}
int now_num = 1;
while (!s.empty()) {
node u = s.top();
s.pop();
if (now-u.num<0||u.val<0||u.num<now_num) {
continue;
}
now_num = u.num;
v += u.val;
now -= 5;
s.push({ u.val - d[u.num],u.num,0 });
}
ans = max(ans, v);
}
cout << ans;
return 0;
}