#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; int n; vector > v; int m; vector tmp; vector star[200002]; vector en[200002]; set ava; long long int cnt[200002]; int main() { cin >> n; for (int i = 0; i < n; i++) { int a; scanf("%d", &a); v.push_back(make_pair(-1,a) ); } for (int i = 0; i < n; i++) { int x; scanf("%d", &x); v[i].first = x; } cin >> m; for (int i = 0; i < m; i++) { int a; scanf("%d", &a); tmp.push_back(a); } sort(v.begin(), v.end()); for (int i = 0; i < m; i++) { int r; scanf("%d", &r); int lef = tmp[i] - r; int b = lower_bound(v.begin(), v.end(), make_pair( lef,-1)) - v.begin(); int rig = tmp[i] + r; int b2 = upper_bound(v.begin(), v.end(), make_pair( rig,INT_MAX )) - v.begin(); star[b].push_back(i); en[b2].push_back(i); } long long int ans = 0; for (int i = 0; i < v.size(); i++) { for (int el : star[i]) { ava.insert(el); } for (int el : en[i]) { ava.erase(el); } if (ava.size() == 0) { ans += v[i].second; } if (ava.size() == 1) { cnt[(*ava.begin())] += v[i].second; } } ans += *max_element(cnt, cnt + m); printf("%lld\n", ans); return 0; }