#include using namespace std; #define pb(a) push_back(a) #define mp(a,b) make_pair(a,b) #define ll long long #define pii pair #define pll pair #define forr(a,b,c) for(int a=b;ac;a--) #define all(v) v.begin(),v.end() #define revall(v) v.rbegin(),v.rend() #define allk(v,k) v.begin()+k,v.end() #define revallk(v,k) v.rbegin()+k,v.rend() #define allkj(v,k,j) v.begin()+k,v.end()-j #define revallkj(v,k,j) v.rbegin()+j,v.rend()-k #define ff first #define ss second #define init inity ////////////////////////// non-modifiable ///////////////////////////////// #define mod 1000000007 #define eps 1e-9 #define inf INT_MAX #define infl LONG_LONG_MAX ll power(ll a,ll n) { if(a==0)return 0; if(a==1 || n==0)return 1; if(n==1)return a%mod;//can remove mod? ll t=power(a,n/2); t=t*t%mod; if(n&1)return t*a%mod; return t; } #define P (int)(2e6)+9 #define FACTORIZE 1 #define DETERMINE 2 /*int primes[P]; void sieve(int prime=2)//2->detects prime, 1->max prime in factorization { forr(i,2,P-3) { if(!primes[i]) for(int j=prime*i;j0;idx-=idx&-idx) { sum+=tree[idx]; //sum%=mod; } return sum; } ////////////////////////// MODIFIABLE ///////////////////////////////////// struct node2 { int id,val; node2() { static int ctx=0; id=ctx++; }; node2(int a,int b=0,int c=0,int d=0,int e=0,int f=0) { val=a; } }; struct comp2 { bool operator()(int a,int b) { //return a s; double e,f,z; vector v, vec; set sett; typedef map Mapp; Mapp mapp; ////////////////////////// variable declarations ////////////////////////// void print()//for detailed output of [a data structure] { } void print2()//for detailed output of [a data structure] { } void input() { ios_base::sync_with_stdio(false);cin.tie(NULL); cin >> n; forr(i,1,n+1) cin >> p[i]; forr(i,1,n+1) cin >> x[i]; cin >> m; forr(i,1,m+1) cin >> c[i]; forr(i,1,m+1) cin >> r[i]; } void compress() { forr(i,1,n+1) sett.insert(x[i]); forr(i,1,m+1) { sett.insert(c[i]); sett.insert(c[i]-r[i]); sett.insert(c[i]+r[i]); } for(auto u : sett) v.pb(u); forr(i,1,n+1) x[i] = (int)( lower_bound(all(v),x[i]) - v.begin() ) + 1; //forr(i,1,m+1) // c[i] = (int)( lower_bound(all(v),c[i]) - v.begin() ) + 1; } inline ll getIdx(int val) { return (int)( lower_bound(all(v),val) - v.begin() ) + 1; } void solve() { compress(); forr(i,1,n+1) ans[ x[i] ] += p[i]; forr(i,1,m+1) { t = 1ll * rand() * rand() % mod; sum[ max( 0ll, getIdx( c[i] - r[i] ) ) ] += 1; sum[ min( (ll)v.size()+1, getIdx( c[i] + r[i] ) + 1 ) ] -= 1; sum2[ max( 0ll, getIdx( c[i] - r[i] ) ) ] ^= t; sum2[ min( (ll)v.size()+1, getIdx( c[i] + r[i] ) + 1 ) ] ^= t; } forr(i,1,v.size()+1) { sum[i] += sum[i-1]; sum2[i] ^= sum2[i-1]; if( sum[i] == 1 ) mapp[ sum2[i] ] += ans[i]; } //forr(i,1,v.size()+1)cout << sum[i] << " ";cout << endl; for(auto u : mapp) res = max( res, u.ss ); forr(i,1,v.size()+1) if( sum[i] == 0 ) d += ans[i]; } void output() { cout << d + res; } ///////////////////////////// my functions //////////////////////////////// int main() { input(); solve(); output(); return 0; } //// MAIN //// MAIN //// MAIN //// MAIN //// MAIN //// MAIN //// MAIN ////