#include #include #include #include #include #include #include #include #include #include #include #include #define pb push_back using namespace std; const int N = (int) 3e5 + 7; const int MOD = (int) 1e9 + 7; struct event { int pos, status, id; }; int n; int p[N]; int x[N]; int m; int y[N]; int r[N]; vector ev; long long sum[N]; long long sun; int main() { #ifdef LOCAL freopen("in.txt", "r", stdin); #endif ios_base::sync_with_stdio(0); cin >> n; for(int i = 1; i <= n; i++) cin >> p[i]; for(int i = 1; i <= n; i++) { cin >> x[i]; ev.pb({x[i], 0, i}); } cin >> m; for(int i = 1; i <= m; i++) { cin >> y[i]; } for(int i = 1; i <= m; i++) { cin >> r[i]; ev.pb({y[i] - r[i], -1, i}); ev.pb({y[i] + r[i], +1, i}); } sort(ev.begin(), ev.end(), [](event a, event b) { if (a.pos == b.pos) return a.status < b.status; return a.pos < b.pos; }); set clouds; for (auto it : ev) { if (it.status == -1) { // cloud open clouds.insert(it.id); } else if (it.status == +1) { clouds.erase(it.id); } else { int who = it.id; if (clouds.size() == 0) sun += p[who]; if (clouds.size() == 1) sum[*clouds.begin()] += p[who]; } } cout << sun + max(0ll, *max_element(sum + 1, sum + m + 1)); return 0; }