#include #include #include #include #include #include using namespace std; bool mysort( pair a , pair b) { return a.first < b.first ; } int main() { int n ; cin >> n ; pair A[n] ; int max = 0 ; for(int i = 0 ; i < n ; i++) { int m ; cin >> m ; A[i].second = m ; } for(int i = 0 ; i < n ; i++) { int m ; cin >> m ; if( m > max) max = m ; A[i].first = m ; } int C[max + 1] , D[max + 1] ; for(int i = 0 ; i <= max ; i++) { C[i] = 0 ; D[i] = 0 ; } for(int i = 0 ; i < n ; i++) { int r = A[i].first ; C[r] = A[i].second ; D[r] = A[i].second ; } int m ; cin >> m ; pair B[m] ; for(int i = 0 ; i < m ; i++) { int r ; cin >> r ; B[i].first = r ; } for(int i = 0 ; i < m ; i++) { int r ; cin >> r ; B[i].second = r ; } for(int i = 0 ; i < m ; i++) { int a , b ; a = B[i].first ; b = B[i].second ; B[i].first = a - b ; B[i].second = a + b ; } int min = 0 ; sort( B , B + m , mysort) ; for(int i = 0 ; i < m - 1 ; i++) { int b = B[ i + 1].first ; int c = B[i].second ; if( c > b) { B[i].second = b - 1 ; } int s = 0 ; for(int j = B[i].first ; j <= B[i].second ; j++) { D[j] = 0 ; s += C[j] ; } if( min < s) min = s; } int s = 0 ; for(int j = B[m - 1].first ; j <= B[m - 1].second ; j++) { D[j] = 0 ; s += C[j] ; } int S = 0 ; if( min < s) min = s; for(int i = 0 ; i <= max ; i++) { S += D[i] ; } cout << S + min ; /* Enter your code here. Read input from STDIN. Print output to STDOUT */ return 0; }