1 #include<iostream>
2 #include<cstdio>
3 using namespace std;
4 const int maxn=107;
5 int n,h,ans;
6 int f[maxn],d[maxn],t[maxn],dp[maxn][maxn],st[maxn],num[maxn][maxn];
7 int main(){
8 cin>>n>>h;h*=12;
9 for(int i=1;i<=n;i++) cin>>f[i];
10 for(int i=1;i<=n;i++) cin>>d[i];
11 for(int i=1;i<n;i++) {cin>>t[i];st[i]=st[i-1]+t[i];}
12 for(int i=2;i<=n;i++) {dp[i][st[i-1]]=f[i];num[i][st[i-1]]=1;} dp[1][1]=f[1];num[1][1]=1;
13 for(int j=2;j<=h;j++){
14 if(f[1]-d[1]*(j-1)<=0) break;
15 dp[1][j]=dp[1][j-1]+f[1]-d[1]*(j-1);
16 }
17 for(int i=2;i<=n;i++){
18 for(int j=st[i-1];j<=h;j++){
19 if(dp[i][j]<dp[i-1][j-t[i-1]]+f[i]){
20 dp[i][j]=dp[i-1][j-t[i-1]]+f[i];num[i][j]=1;
21
22 }
23 for(int k=j-1;k>=1;k--){
24 int lft=0;
25 for(int u=k;u<=j;u++){
26 lft+=f[i]-d[i]*num[i][k]*(u-k+1);
27 }
28 if(dp[i][j]<dp[i][k]+lft){
29 dp[i][j]=dp[i][k]+lft;num[i][j]=num[i][k]+1;
30 cout<<"r2 "<<i<<" "<<j<<" "<<dp[i][j]<<endl;
31 }
32 if(lft-d[i]<0) break;
33 }
34 }
35 }
36 for(int i=1;i<=n;i++){
37 for(int j=1;j<=h;j++)
38 cout<<dp[i][j]<<" ";
39 cout<<endl;
40 }
41 for(int i=1;i<=n;i++){
42 for(int j=1;j<=h;j++)
43 ans=max(ans,dp[i][j]);
44 }
45 cout<<ans<<endl;
46 return 0;
47 }