#include #include #include #include #include using namespace std; vector npop, postown, poscloud, rancloud, poscovtown; int ntowns, nclouds; int maxPeople() { int ris = 0; if(nclouds == 1 || nclouds == 0) { for(int i = 0; i < npop.size(); i++) ris += npop[i]; } else { for(int i = 0; i < poscloud.size(); i++) { int pmin = poscloud[i]-rancloud[i]; int pmax = poscloud[i]+rancloud[i]; for(int j = 0; j < postown.size(); j++) { bool cov = false; for(int k = pmin; k <= pmax; k++) if(k == postown[j]) { cov = true; poscovtown.push_back(j); break; } if(!cov) ris += npop[j]; } } if(poscovtown.size() == 0) for(int i = 0; i < npop.size(); i++) ris += npop[i]; else { int maxcovp = npop[poscovtown[0]]; for(int j = 1; j < poscovtown.size(); j++) if(npop[poscovtown[j]] > maxcovp) maxcovp = npop[poscovtown[j]]; ris += maxcovp; } } return ris; } int main() { cin >> ntowns; for(int i = 0; i < ntowns; i++) { int temp; cin >> temp; npop.push_back(temp); } for(int i = 0; i < ntowns; i++) { int temp; cin >> temp; postown.push_back(temp); } cin >> nclouds; for(int i = 0; i < nclouds; i++) { int temp; cin >> temp; poscloud.push_back(temp); } for(int i = 0; i < nclouds; i++) { int temp; cin >> temp; rancloud.push_back(temp); } cout << maxPeople(); return 0; }