package main import "fmt" func main() { var n, m int64 fmt.Scanf("%d", &n) pp := make([]int64, n) for i := int64(0); i < n; i++ { var p int64 fmt.Scanf("%d", &p) pp[i] = p } towns := make(map[int64]int64) for i := int64(0); i < n; i++ { var x int64 fmt.Scanf("%d", &x) towns[x] = pp[i] } fmt.Scanf("%d", &m) yy := make([]int64, m) for i := int64(0); i < m; i++ { var y int64 fmt.Scanf("%d", &y) yy[i] = y } clouds := make(map[int64]int64) for i := int64(0); i < m; i++ { var r int64 fmt.Scanf("%d", &r) for j := 1 - r; j <= r; j++ { clouds[yy[i]-j] = clouds[yy[i]-j] + 1 } } fmt.Println(maxPeople(towns, clouds)) } func maxPeople(towns map[int64]int64, clouds map[int64]int64) (max int64) { var maxRemove int64 for i, town := range towns { if clouds[i] == 0 { max = max + town } else if clouds[i] == 1 && maxRemove < town { maxRemove = town } } max = max + maxRemove return max }