/* #pragma comment(linker, "/stack:200000000") #pragma GCC optimize("Ofast") #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native") ./**/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include //#include using namespace std; //using namespace __gnu_cxx; //defines typedef long long ll; typedef long double ld; #define TIME clock() * 1.0 / CLOCKS_PER_SEC #define fast_read cin.sync_with_stdio(0) #define PREX(number) cout << fixed << setprecision(number) #define nul point(0, 0) #define random srand(time(NULL)) #define rand_int abs((rand() << 15) | rand()) #define str_to_int(stroka) atoi(stroka.c_str()) #define str_to_ll(stroka) atoll(stroka.c_str()) #define str_to_double(stroka) atof(stroka.c_str()) #define what_is(x) cerr << #x << " is " << x << endl #define solve_system int number; cin >> number; for (int i = 0; i < number; i++) solve() #define solve_system_scanf int number; scanf("%d", &number); forn(i, 0, number) solve() //easy functions template< typename T > T gcd(T a, T b) { return a ? gcd(b % a, a) : b; } template< typename T > T lcm(T a, T b) { return (a / gcd(a, b)) * b; } bool is_down(char x) { return ('a' <= x && x <= 'z'); } bool is_upper(char x) { return ('A' <= x && x <= 'Z'); } bool is_digit(char x) { return ('0' <= x && x <= '9'); } //constants const ld pi = 3.141592653589793238462643383279; const ld log23 = 1.58496250072115618145373894394781; const ld eps = 1e-8; const ld zero = 0; const ll INF = 1e18; const int COUT = 30; const int prost = 239; const ll prost64 = 239; const int two = 2; const int thr = 3; const ll sr = 31; const ll MOD = 1e9 + 7; const int BIG = 2 * 1e9 + 1; const int alf = 26; const int MAX_N = 2 * 1e5 + 1; const int MAX_M = 2001; const int MAX_T = (1 << 20); const int B = trunc(sqrt(MAX_N)) + 1; const int MAX_LOG = 19; const int km = (1 << 18); const int dx[4] = {-1, 0, 1, 0}; const int dy[4] = {0, 1, 0, -1}; const int dxo[8] = {-1, -1, -1, 0, 1, 1, 1, 0}; const int dyo[8] = {-1, 0, 1, 1, 1, 0, -1, -1}; const int bit_max = 32; const int dig = 10; const string str_alf = "abcdefghijklmnopqrstuvwxyz"; const string str_alf_big = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; const int day[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; const int digarr[10] = {6, 2, 5, 5, 4, 5, 6, 3, 7, 6}; const int bt = 31; // Code starts here vector > ev; int n, m, y[MAX_N]; ll p[MAX_N], ans[MAX_N]; int main() { /* #ifndef ONLINE_JUDGE freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); #endif /**/ fast_read; cin >> n; for (int i = 0; i < n; i++) cin >> p[i]; for (int i = 0; i < n; i++) { int x; cin >> x; ev.push_back(make_tuple(x, 1, i)); } cin >> m; for (int i = 0; i < m; i++) cin >> y[i]; for (int i = 0; i < m; i++) { int r; cin >> r; ev.push_back(make_tuple(y[i] - r, 0, i)); ev.push_back(make_tuple(y[i] + r, 2, i)); } sort(ev.begin(), ev.end()); set q; ll sum = 0; for (tuple t : ev) { int tp = get<1>(t); if (tp == 0) q.insert(get<2>(t)); else if (tp == 2) q.erase(get<2>(t)); else { int id = get<2>(t); if (q.empty()) sum += p[id]; else if (q.size() == 1) ans[*q.begin()] += p[id]; } } ll r = 0; for (int i = 0; i < m; i++) r = max(r, sum + ans[i]); cout << r; return 0; }