#include #include #include #define rep(i,j,k) for(register int i = j; i <= k; i++) #define dow(i,j,k) for(register int i = j; i >= k; i--) #define ll long long using namespace std; inline int read() { int s = 0, t = 1; char c = getchar(); while( !isdigit(c) ) { if( c == '-' ) t = -1; c = getchar(); } while( isdigit(c) ) s = s * 10 + c - 48, c = getchar(); return s * t; } const int N = 2e5+5; int n, m, r, L, R, f[N], fa[N], bel[N]; inline int find(int x) { static int q[N], tot = 0; while( x != fa[x] ) q[++tot] = x, x = fa[x]; while( tot ) fa[q[tot--]] = x; return x; } ll g[N], ans = 0; struct node{ int l, r, x; } A[N]; struct Node{ int x, v; inline bool operator < (const Node&rhs) const { return x < rhs.x; } } B[N]; inline bool cmp1(const node&a,const node&b) { return a.l < b.l; } inline bool cmp2(const node&a,const node&b) { return a.r < b.r; } int main() { n = read(); rep(i,1,n) B[i].v = read(); rep(i,1,n) B[i].x = read(); rep(i,1,n+1) fa[i] = i; m = read(); rep(i,1,m) A[i].x = read(); rep(i,1,m) r = read(), A[i].l = A[i].x - r, A[i].r = A[i].x + r, A[i].x = i; sort(B+1,B+n+1); sort(A+1,A+m+1,cmp1); L = 1; rep(i,1,m) { while( L <= n && B[L].x < A[i].l ) L++; A[i].l = L; } sort(A+1,A+m+1,cmp2); R = 0; rep(i,1,m) { while( R < n && B[R+1].x <= A[i].r ) R++; A[i].r = R; } rep(i,1,m) { if( A[i].l <= A[i].r ) { f[A[i].l]++, f[A[i].r+1]--; int x = find(A[i].l); while( x <= A[i].r ) { bel[x] = i, fa[x] = x + 1, x = find(x); } } } rep(i,2,n) f[i] += f[i-1]; rep(i,1,n) { if( !f[i] ) ans += B[i].v; else if( f[i] == 1 ) g[bel[i]] += B[i].v; } rep(i,1,m) g[0] = max(g[0],g[i]); cout<