# pragma GCC optimize("O3") # include std::pair DR[] = {{-1,0},{0,1},{1,0},{0,-1},{-1,1},{-1,-1},{1,1},{1,-1}}; # define ll long long # define clock (clock() * 1000.0 / CLOCKS_PER_SEC) # define rc(s) return cout << s,0 # define _ ios_base::sync_with_stdio(false);cin.tie(0);cerr.tie(0);cout.tie(0); # define db(x) cerr << #x << " = " << x << '\n' # define pb push_back # define mp make_pair # define all(s) s.begin(),s.end() # define sz(x) (int)((x).size()) # define int ll using namespace std; using namespace std; int s[1 << 21],f[1 << 21]; int maximumPeople(vector p, vector x, vector y, vector r) { // Return the maximum number of people that will be in a sunny town after removing exactly one cloud. int sum = 0; int ans = 0; vector>vek; vectorvec; for(int i = 0;i < sz(x);i++) { vek.pb(mp(x[i],i)); vec.pb(x[i]); } sort(vek.begin(),vek.end()); sort(vec.begin(),vec.end()); for(int i = 0;i < sz(p);i++) { s[i] = p[vek[i].second]; if(i) s[i] += s[i - 1]; } for(int i = 0;i < sz(y);i++) { int ff = 0; auto it1 = lower_bound(vec.begin(),vec.end(),y[i] - r[i]); auto it2 = upper_bound(vec.begin(),vec.end(),y[i] + r[i]); if(it2 == vec.begin()) { ff = 0; } else { if(it1 == vec.end()) ff = 0; else { it2--; int a = it1 - vec.begin(); int b = it2 - vec.begin(); if(b < a) ff = 0; else { ff = s[b] - (a == 0 ? 0 : s[a - 1]); } f[a]++; f[b + 1]--; } } } for(int i = 0;i < sz(vec);i++) { if(i) f[i] += f[i - 1]; if(f[i] != 1) { s[i] = 0; } else s[i] = p[vek[i].second]; if(f[i] == 0) sum += p[vek[i].second]; } for(int i = 0;i < sz(p);i++) { if(i) s[i] += s[i - 1]; } for(int i = 0;i < sz(y);i++) { int ff = 0; auto it1 = lower_bound(vec.begin(),vec.end(),y[i] - r[i]); auto it2 = upper_bound(vec.begin(),vec.end(),y[i] + r[i]); if(it2 == vec.begin()) { ff = 0; } else { if(it1 == vec.end()) ff = 0; else { it2--; int a = it1 - vec.begin(); int b = it2 - vec.begin(); if(b < a) ff = 0; else { ff = s[b] - (a == 0 ? 0 : s[a - 1]); } f[a]++; f[b + 1]--; } } ans = max(ans,sum + ff); } return ans; } int32_t main() { //freopen("input","r",stdin); int n; cin >> n; vector p(n); for(int p_i = 0; p_i < n; p_i++){ cin >> p[p_i]; } vector x(n); for(int x_i = 0; x_i < n; x_i++){ cin >> x[x_i]; } int m; cin >> m; vector y(m); for(int y_i = 0; y_i < m; y_i++){ cin >> y[y_i]; } vector r(m); for(int r_i = 0; r_i < m; r_i++){ cin >> r[r_i]; } int result = maximumPeople(p, x, y, r); cout << result << endl; return 0; }