#include #include #include #include #include #include #include long int maximumPeople(int p_size, long int* p, int x_size, long int* x, int y_size, long int* y, int r_size, long int* r) { // Return the maximum number of people that will be in a sunny town after removing exactly one cloud. long int cloud_min[y_size]; long int cloud_max[y_size]; int i, j; int impact[y_size][x_size]; long int population_impact[y_size]; long int max_people = 0; long int max_population_impact = -1; int max = -1; memset(impact, 0, sizeof(impact)); memset(population_impact, 0, sizeof(population_impact)); for ( i = 0; i < y_size; i++) { cloud_min[i] = y[i] - r[i]; cloud_max[i] = y[i] + r[i]; for ( j = 0; j < x_size; j++) { if (!(x[j] < cloud_min[i] || x[j] > cloud_max[i])) { impact[i][j] = 1; population_impact[i] += p[j]; } } } for( i = 0; i < y_size; i++) { for ( j = 0; j < x_size; j++) { if (impact[i][j] != 0) { max_people += p[j]; } } } for ( i = 0; i < y_size; i++) { if (population_impact[i] > max_population_impact) { max_population_impact = population_impact[i]; } } return (max_people + max_population_impact); } int main() { int n; scanf("%i", &n); long int *p = malloc(sizeof(long int) * n); for (int p_i = 0; p_i < n; p_i++) { scanf("%li",&p[p_i]); } long int *x = malloc(sizeof(long int) * n); for (int x_i = 0; x_i < n; x_i++) { scanf("%li",&x[x_i]); } int m; scanf("%i", &m); long int *y = malloc(sizeof(long int) * m); for (int y_i = 0; y_i < m; y_i++) { scanf("%li",&y[y_i]); } long int *r = malloc(sizeof(long int) * m); for (int r_i = 0; r_i < m; r_i++) { scanf("%li",&r[r_i]); } long int result = maximumPeople(n, p, n, x, m, y, m, r); printf("%ld\n", result); return 0; }