import java.io.*; import java.util.*; import java.math.*; import java.lang.*; import static java.lang.Math.*; public class Main implements Runnable { static class InputReader { private InputStream stream; private byte[] buf = new byte[1024]; private int curChar; private int numChars; private SpaceCharFilter filter; private BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); public InputReader(InputStream stream) { this.stream = stream; } public int read() { if (numChars==-1) throw new InputMismatchException(); if (curChar >= numChars) { curChar = 0; try { numChars = stream.read(buf); } catch (IOException e) { throw new InputMismatchException(); } if(numChars <= 0) return -1; } return buf[curChar++]; } public String nextLine() { String str = ""; try { str = br.readLine(); } catch (IOException e) { e.printStackTrace(); } return str; } public int nextInt() { int c = read(); while(isSpaceChar(c)) c = read(); int sgn = 1; if (c == '-') { sgn = -1; c = read(); } int res = 0; do { if(c<'0'||c>'9') throw new InputMismatchException(); res *= 10; res += c - '0'; c = read(); } while (!isSpaceChar(c)); return res * sgn; } public long nextLong() { int c = read(); while (isSpaceChar(c)) c = read(); int sgn = 1; if (c == '-') { sgn = -1; c = read(); } long res = 0; do { if (c < '0' || c > '9') throw new InputMismatchException(); res *= 10; res += c - '0'; c = read(); } while (!isSpaceChar(c)); return res * sgn; } public double nextDouble() { int c = read(); while (isSpaceChar(c)) c = read(); int sgn = 1; if (c == '-') { sgn = -1; c = read(); } double res = 0; while (!isSpaceChar(c) && c != '.') { if (c == 'e' || c == 'E') return res * Math.pow(10, nextInt()); if (c < '0' || c > '9') throw new InputMismatchException(); res *= 10; res += c - '0'; c = read(); } if (c == '.') { c = read(); double m = 1; while (!isSpaceChar(c)) { if (c == 'e' || c == 'E') return res * Math.pow(10, nextInt()); if (c < '0' || c > '9') throw new InputMismatchException(); m /= 10; res += (c - '0') * m; c = read(); } } return res * sgn; } public String readString() { int c = read(); while (isSpaceChar(c)) c = read(); StringBuilder res = new StringBuilder(); do { res.appendCodePoint(c); c = read(); } while (!isSpaceChar(c)); return res.toString(); } public boolean isSpaceChar(int c) { if (filter != null) return filter.isSpaceChar(c); return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1; } public String next() { return readString(); } public interface SpaceCharFilter { public boolean isSpaceChar(int ch); } } public static void main(String args[]) throws Exception { new Thread(null, new Main(),"Main",1<<26).start(); } public void run() { InputReader sc= new InputReader(System.in); PrintWriter w= new PrintWriter(System.out); int n = sc.nextInt(); int p[] = new int[n]; for(int i = 0; i < n; ++i) p[i] = sc.nextInt(); TreeMap map = new TreeMap<>(); int x[] = new int[n]; for(int i = 0; i < n; ++i) { x[i] = sc.nextInt(); map.put(x[i], 1); } int m = sc.nextInt(); int l[] = new int[m]; int r[] = new int[m]; for(int i = 0; i < m; ++i) l[i] = sc.nextInt(); for(int i = 0; i < m; ++i) { int val = sc.nextInt(); l[i] = l[i] - val; r[i] = l[i] + 2 * val; map.put(l[i], 1); map.put(r[i], 1); } int cur = 0; for(int i : map.keySet()) { map.put(i, cur++); } long pop[] = new long[cur]; for(int i = 0; i < n; ++i) { pop[map.get(x[i])] += (long)p[i]; } int cloudCnt[] = new int[cur + 1]; int range[] = new int[cur + 1]; int cloud[] = new int[cur + 1]; for(int i = 0; i < m; ++i) { l[i] = map.get(l[i]); r[i] = map.get(r[i]); cloudCnt[l[i]]++; cloudCnt[r[i] + 1]--; if(range[l[i]] < r[i] - l[i] + 1) { range[l[i]] = r[i] - l[i] + 1; cloud[l[i]] = i; } } int curC = cloud[0]; int rng = range[0]; for(int i = 1; i < cur; ++i) { rng--; cloudCnt[i] = cloudCnt[i - 1] + cloudCnt[i]; if(rng > range[i]) { cloud[i] = curC; } else { curC = cloud[i]; rng = range[i]; } } long alr = 0; long ans[] = new long[m]; for(int i = 0; i < cur; ++i) { if(cloudCnt[i] == 0) alr += (long)pop[i]; else if(cloudCnt[i] == 1) ans[cloud[i]] += (long)pop[i]; } long maxv = 0; for(int i = 0; i < m; ++i) maxv = max(maxv, ans[i]); w.print((maxv + alr)); w.close(); } }