#include #include #define pb push_back #define pf push_front #define pp pop_back #define sz(a) (int)(a.size()) #define mp make_pair #define F first #define S second #define next _next #define prev _prev #define left _left #define right _right #define y1 _y1 #define all(x) x.begin(), x.end() #define what_is(x) #x << " is " << (x) using namespace std; typedef long long ll; typedef unsigned long long ull; typedef long double ld; typedef pair pii; typedef pair pll; const int N = (int)1e6 + 123; const ll INF = (ll)1e18 + 123; const int inf = (int)1e9 + 123; const int MOD = (int)1e9 + 7; void megaRandom() { unsigned int FOR; asm("rdtsc" : "=A"(FOR)); srand(FOR); } int n, m; pii p[N]; int cent[N], rs[N]; vector g[N]; ll who[N]; int main() { megaRandom(); scanf("%d", &n); for(int i = 1; i <= n; i++) scanf("%d", &p[i].S); for(int i = 1; i <= n; i++) scanf("%d", &p[i].F); sort(p + 1, p + n + 1); scanf("%d", &m); for(int i = 1; i <= m; i ++) { scanf("%d", ¢[i]); } for(int i = 1; i <= m; i ++) { scanf("%d", &rs[i]); int ps1 = 0, ps2 = 0; int L = cent[i] - rs[i], R = cent[i] + rs[i]; int l = 1, r = n; while(r - l > 1) { int mid = (l + r) >> 1; if(L <= p[mid].F) r = mid; else l = mid; } if(L <= p[l].F) r = l; if(L > p[r].F) continue; ps1 = r; l = 1, r = n; while(r - l > 1) { int mid = (l + r) >> 1; if(R >= p[mid].F) l = mid; else r = mid; } if(R >= p[r].F) l = r; if(R < p[l].F) continue; ps2 = l; g[ps1].pb(i); g[ps2 + 1].pb(-i); } ll res = 0; set st; for(int i = 1; i <= n;i ++) { for(auto z : g[i]) { if(z < 0) st.erase(-z); else st.insert(z); } if(sz(st) == 0) res += p[i].S; if(sz(st) == 1) who[*st.begin()] += p[i].S; } ll mx = 0; for(int i = 1; i <= m; i ++) mx = max(mx, who[i]); res += mx; printf("%lld", res); return 0; }