#include using namespace std; bool cmp(pair & a, pair & b) { return a.first < b.first; } bool cmpL(pair & a, pair & b) { return a.first < b.first; } long maximumPeople(int n, int m,vector p, vector x, vector y, vector r) { vector> starts(m); vector> ends(m); for (int i = 0; i < m; i++) { starts[i] = make_pair(y[i] - r[i], i); ends[i] = make_pair(y[i] + r[i], i); } vector> cities(n); for (int i = 0; i < n; i++) cities[i] = make_pair(x[i], p[i]); sort(starts.begin(), starts.end(), cmp); sort(ends.begin(), ends.end(), cmp); sort(cities.begin(), cities.end(), cmpL); set activeClouds; long covered[m]; for (int i = 0; i < m; i++) covered[i] = 0; int i = 0; int j = 0; int k = 0; long free = 0; while (k < n) { long cityX = cities[k].first; while (i < m && starts[i].first <= cityX) { activeClouds.insert(starts[i].second); i++; } while (j < m && ends[j].first < cityX) { activeClouds.erase(ends[j].second); j++; } if (activeClouds.size() == 0) free += cities[k].second; else if (activeClouds.size() == 1) covered[*(activeClouds.begin())] += cities[k].second; k++; } long maxcovered = 0; for (i = 0; i < m; i++) maxcovered = max(maxcovered, covered[i]); return free + maxcovered; } 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(n,m,p, x, y, r); cout << result << endl; return 0; }