#include #define lp(i,j,n) for(int i=j;ia[n_]; vector add[n_],remo[n_]; ll go[n_]; int BS(int x, int par){ if(!par){ if(a[n-1].first=x){ res=mid; hi=mid-1; }else lo=mid+1; } return res; }else{ if(a[0].first>x)return -1; int lo=0,hi=n-1,res=-1; while(lo<=hi){ int mid =(lo+hi)/2; if(a[mid].first<=x){ res=mid; lo=mid+1; }else hi=mid-1; } return res; } } int main() { ios_base::sync_with_stdio(0);cin.tie(NULL); cin>>n; lp(i,0,n)cin>>a[i].second; lp(i,0,n)cin>>a[i].first; sort(a,a+n); cin>>m; lp(i,0,m)cin>>y[i]; lp(i,0,m)cin>>r[i]; lp(i,0,m){ int left=y[i]-r[i],right=y[i]+r[i]; int firstAfterLeft=BS(left,0),firstBeforeRight=BS(right,1); if(firstAfterLeft==-1||firstBeforeRight==-1||firstAfterLeft>firstBeforeRight)continue; add[firstAfterLeft].push_back(i); remo[firstBeforeRight].push_back(i); } ll res=0,mx=0,cnt=0,sofar=0; unordered_setcur; lp(i,0,n){ for(auto v:add[i])cur.insert(v); if(!cur.size()){ res+=a[i].second; } else if(cur.size() ==1){ int l=-1; for(auto x:cur)l=x; go[l]+=a[i].second; } for(auto v:remo[i])cur.erase(v); } lp(i,0,n_)mx=max(mx,go[i]); cout<