#include #include using namespace std; const int MAXN = 5005, MAXK = 1e4 + 1; int_fast32_t n; int_fast64_t a[MAXN], b[MAXN], k[MAXN]; int_fast64_t sum; int_fast64_t value[MAXN], prefix[MAXN]; int_fast64_t dp[MAXK][MAXN]; int_fast64_t maxValue = 0; int days = 0; bool fail, optimize; int main() { ios::sync_with_stdio(false); cin.tie(NULL);cout.tie(NULL); //ifstream cin("test2Fruits.txt"); ifstream cin("fruits.in"); ofstream cout("fruits.out"); int_fast32_t i, last; int_fast64_t answer = 0; cin >> n; for(i = 1;i<=n;++i) cin >> a[i]; for(i = 1;i<=n;++i) cin >> b[i]; for(i = 1;i<=n;++i) cin >> k[i]; for(int i = 1;i<=n;++i) { if(k[i]==0) a[i] = 0; } dp[0][0] = 0; for(int i = 1;i<=n;++i) { dp[0][i] = dp[0][i-1] + a[i]; answer = max(answer, dp[0][i]); } last = 0; for(int d = 1;d=1;--i) { a[i] += b[i]; if(k[i]<=d) { a[i] = 0; optimize = false; } else fail = false; prefix[i] = prefix[i+1] + a[i]; value[i] = prefix[i] + dp[last][i-1]; } if(fail==true) { days = d; break; } if(optimize==false) { maxValue = 0; for(i = 1;i<=n;++i) { maxValue = max(maxValue, value[i]); dp[d][i] = max(maxValue - prefix[i+1], dp[last][i]); } last = d; } } if(days!=0) { for(int i = 1;i<=n;++i) answer = max(answer, dp[last][i]); } cout << answer << '\n'; }