#include using namespace std; const long bill = 1000 * 1000 * 1000; struct tup { long l; long r; }; long maximumPeople(vector p, vector x, vector y, vector r) { // Return the maximum number of people that will be in a sunny town after removing exactly one cloud. vector overlapping_clouds; overlapping_clouds.push_back({y[0] - r[0], y[0] + r[0]}); int masked[bill + 1] = {0}; for (int i = 1; i < y.size(); i++) { long l = y[i] - r[i]; long r = (long) y[(int) i] + (long) r[(int) i]; if (l < 1) { l = 1; } if (r > bill) { r = bill; } for (long i = l; i <= r; i++) { masked[i]++; } vector tmp; bool pushed = false; for (auto& p : overlapping_clouds) { if (l < p.l && r > p.r && !pushed) { tmp.push_back({l, r}); pushed = true; } } swap(tmp, overlapping_clouds); } long long max_sum = 0; long long sum = 0; for (auto& j : overlapping_clouds) { for (long i = j.l; i <= j.r; i++) { masked[i]--; } for (int i = 0; i < x.size(); i++) { if (masked[x[i]] > 0) { sum += p[i]; } } if (sum > max_sum) { max_sum = sum; } for (long i = j.l; i <= j.r; i++) { masked[i]++; } } return max_sum; } int main() { int n; cin >> n; vector p(n); for(int p_i = 0; p_i < n; p_i++){ cin >> p[p_i]; } vector x(n); for(int x_i = 0; x_i < n; x_i++){ cin >> x[x_i]; } int m; cin >> m; vector y(m); for(int y_i = 0; y_i < m; y_i++){ cin >> y[y_i]; } vector r(m); for(int r_i = 0; r_i < m; r_i++){ cin >> r[r_i]; } long result = maximumPeople(p, x, y, r); cout << result << endl; return 0; }