#include using namespace std; const int N = 200010; int n, m; int p[N], x[N], y[N], r[N]; pair a[N]; vector val; long long pop[N * 3]; int getId(int u) { return lower_bound(val.begin(), val.end(), u) - val.begin(); } struct SegmentTree { long long t[N * 12]; long long sum[N * 12]; int cnt[N * 12]; void init(int node, int l, int r) { if (l == r) { t[node] = sum[node] = pop[l]; cnt[node] = 0; return; } int m = (l + r) >> 1; init(node << 1, l, m); init(node << 1 | 1, m + 1, r); t[node] = sum[node] = t[node << 1] + t[node << 1 | 1]; } void add(int node, int l, int r, int x, int y, int val) { if (x > r || y < l) { return; } if (x <= l && r <= y) { cnt[node] += val; if (cnt[node]) { t[node] = 0; } else { if (l == r) { t[node] = sum[node]; } else { t[node] = t[node << 1] + t[node << 1 | 1]; } } return; } int m = (l + r) >> 1; add(node << 1, l, m, x, y, val); add(node << 1 | 1, m + 1, r, x, y, val); if (cnt[node]) { t[node] = 0; } else { t[node] = t[node << 1] + t[node << 1 | 1]; } } } t; int main() { scanf("%d", &n); for (int i = 1; i <= n; i++) { scanf("%d", p + i); } for (int i = 1; i <= n; i++) { scanf("%d", x + i); val.push_back(x[i]); } scanf("%d", &m); for (int i = 1; i <= m; i++) { scanf("%d", y + i); } for (int i = 1; i <= m; i++) { scanf("%d", r + i); val.push_back(y[i] - r[i]); val.push_back(y[i] + r[i]); a[i] = make_pair(y[i] - r[i], y[i] + r[i]); } sort(val.begin(), val.end()); val.resize(unique(val.begin(), val.end()) - val.begin()); for (int i = 1; i <= n; i++) { pop[getId(x[i])] += p[i]; } // for (int i = 0; i < val.size(); i++) { // cout << val[i] << " " << pop[i] << endl; // } t.init(1, 0, val.size() - 1); for (int i = 1; i <= m; i++) { t.add(1, 0, val.size() - 1, getId(a[i].first), getId(a[i].second), 1); } // cout << t.t[1] << endl; long long res = 0; for (int i = 1; i <= m; i++) { t.add(1, 0, val.size() - 1, getId(a[i].first), getId(a[i].second), -1); res = max(res, t.t[1]); // cout << i << " " << t.t[1] << " " << a[i].first << " " << a[i].second << endl; t.add(1, 0, val.size() - 1, getId(a[i].first), getId(a[i].second), 1); } cout << res << endl; return 0; }