## https://yukicoder.me/problems/no/1726 def main(): N, M = map(int, input().split()) P = list(map(int, input().split())) grasses = {} for i in range(N): a, b = map(int, input().split()) grasses[(a, b)] = P[i] balls = [] for _ in range(M): c, d = map(int, input().split()) balls.append((c, d)) def calc(balls, grasses, keys): answer = 0 vector_map = {} for base_ball in balls: for (gx, gy), p in grasses.items(): vx = gx - base_ball[0] vy = gy - base_ball[1] if (vx, vy) not in vector_map: vector_map[(vx, vy)] = 0 vector_map[(vx, vy)] += p ans = max(vector_map.values()) return max(answer, ans) keys = list(grasses.keys()) answer1 = calc(balls, grasses, keys) answer2 = calc([(x, -y) for x, y in balls], grasses, keys) answer3 = calc([(-x, y) for x, y in balls], grasses, keys) answer4 = calc([(-x, -y) for x, y in balls], grasses, keys) answer = max(answer1, answer2, answer3, answer4) print(answer) if __name__ == '__main__': main()