#include #define X first #define Y second #define eb push_back #define siz(a) int(a.size()) #define endl "\n" #define trace2(x, y) cout <<#x<<": "< vi; typedef vector < ll > vll; const int mod=1e9+7; const int maxn=1e6+5; /* finding inverse upto n * for i in xrange(2, N): ifc[i] = -(mod / i) * ifc[mod % i] % mod * */ ll power(ll base, ll exp){ll res = 1; while(exp){if(exp%2)res*=base;base*=base;res%=mod;base%=mod;exp/=2;}return res;} ll p[maxn], x[maxn], y[maxn], r[maxn], arr[maxn], val[maxn]; int main(){ ios_base::sync_with_stdio(false);cin.tie(NULL); cout.tie(NULL); //freopen("input.in", "r", stdin);freopen("output.out", "w", stdout); ll n, m, i, j; cin >> n; for(i=1; i<=n; i++){ cin >> p[i]; } vector > d; vll dd; d.eb({0, 0}); dd.eb(0); vector > > v; for(i=1; i<=n; i++){ cin >> x[i]; v.eb({x[i], {2, i}}); d.eb({x[i], i}); dd.eb(x[i]); } cin >> m; for(i=1; i<=m; i++){ cin >> y[i]; } for(i=1; i<=m; i++){ cin >> r[i]; v.eb({y[i] - r[i], {1, 0}}); v.eb({y[i] + r[i] + 1, {-1, 0}}); } sort(v.begin(), v.end()); ll curr = 0; for(i=0; i= 0); } ll ans = 0, temp = 0; for(i=1; i<=n; i++){ if(arr[i] == 0){ ans += p[i]; } } sort(d.begin(), d.end()); sort(dd.begin(), dd.end()); for(i=1; i<=n; i++){ if(arr[d[i].Y] == 1){ val[i] = p[d[i].Y]; } val[i] += val[i-1]; } for(i=1; i<=m; i++){ temp = max(temp, val[upper_bound(dd.begin(), dd.end(), y[i] + r[i]) - dd.begin() - 1] - val[lower_bound(dd.begin(), dd.end(), y[i] - r[i]) - dd.begin() - 1]); } cout << ans + temp << endl; return 0; }