#include using namespace std; typedef long long ll; typedef pair < int, int > ii; const int N = 6e5 + 5; int n, m; int p[N], a[N]; int l[N], r[N]; ll dp[N], dp2[N]; ll cnt[N]; vector < int > v; int getid(int x) { return lower_bound(v.begin(), v.end(), x) - v.begin() + 1; } int main() { scanf("%d", &n); ll total = 0; for(int i = 1; i <= n; i++) { scanf("%d", p + i); total += p[i]; } for(int i = 1; i <= n; i++) { scanf("%d", a + i); v.push_back(a[i]); } scanf("%d", &m); for(int i = 1; i <= m; i++) scanf("%d", l + i); for(int i = 1; i <= m; i++) { int x; scanf("%d", &x); r[i] = l[i] + x; l[i] = l[i] - x; v.push_back(l[i]); v.push_back(r[i]); } sort(v.begin(), v.end()); v.resize(unique(v.begin(), v.end()) - v.begin()); for(int i = 1; i <= n; i++) cnt[getid(a[i])] += p[i]; for(int i = 1; i <= m; i++) { dp[getid(l[i])]++; dp[getid(r[i])+1]--; } for(int i = 1; i < N; i++) dp[i] += dp[i - 1]; for(int i = 1; i < N; i++) { if(dp[i] >= 1) { dp2[i] = dp2[i - 1] + cnt[i]; } else dp2[i] = dp2[i - 1]; if(dp[i] > 1) { // if(i<=v.size()){ // printf("i = %d\n", i); // printf("v[i-1]=%d\n",v[i-1]); // } dp[i] = dp[i - 1] + cnt[i]; } else dp[i] = dp[i - 1]; } ll ans = 0; for(int i = 1; i <= m; i++) { ans = max(ans, total-dp[getid(r[i])]+dp[getid(l[i])-1]-(dp2[getid(l[i])-1]+dp2[N-1]-dp2[getid(r[i])])); } printf("%lld\n", ans); return 0; }