import sys import math input = sys.stdin.readline class SprinklerArea: _T_ONCE = 1 / 4 * math.pi _T_DUET = 1 / 6 * math.pi + 3 ** (1 / 2) / 4 def __init__(self, size: tuple[int, int], n: int, sprinkler_pos): self.size = size self.map = [[0 for _ in range(size[1])] for _ in range(size[0])] self.n = n self.sprinkler_pos = sprinkler_pos @staticmethod def combine(r_before, r_after): if r_before == 0: return r_after elif r_before in [1, 2, 3, 4]: if r_after % 2 == r_before % 2: return 6 else: return 5 else: return 6 @staticmethod def get_area(type: int): if type == 0: return 0.0 elif type in [1, 2, 3, 4]: return SprinklerArea._T_ONCE elif type == 5: return SprinklerArea._T_DUET else: return 1.0 def solve(self): for pos_x, pos_y in self.sprinkler_pos: calc_pos = [] if pos_x == 0: if pos_y == 0: calc_pos.append(((pos_x, pos_y), 2)) elif pos_y == self.size[1]: calc_pos.append(((pos_x, pos_y - 1), 3)) else: calc_pos.append(((pos_x, pos_y), 2)) calc_pos.append(((pos_x, pos_y - 1), 3)) elif pos_x == self.size[0]: if pos_y == 0: calc_pos.append(((pos_x - 1, pos_y), 1)) elif pos_y == self.size[1]: calc_pos.append(((pos_x - 1, pos_y - 1), 4)) else: calc_pos.append(((pos_x - 1, pos_y), 1)) calc_pos.append(((pos_x - 1, pos_y - 1), 4)) else: if pos_y == 0: calc_pos.append(((pos_x - 1, pos_y), 1)) calc_pos.append(((pos_x, pos_y), 2)) elif pos_y == self.size[1]: calc_pos.append(((pos_x - 1, pos_y - 1), 4)) calc_pos.append(((pos_x, pos_y - 1), 3)) else: calc_pos.append(((pos_x - 1, pos_y), 1)) calc_pos.append(((pos_x - 1, pos_y - 1), 4)) calc_pos.append(((pos_x, pos_y), 2)) calc_pos.append(((pos_x, pos_y - 1), 3)) for pos, rplus in calc_pos: self.map[pos[0]][pos[1]] = self.combine(self.map[pos[0]][pos[1]], rplus) return sum(sum(map(self.get_area, row)) for row in self.map) if __name__ == '__main__': size = tuple(map(int, input().split())) n = int(input()) pos = [tuple(map(int, input().split())) for _ in range(n)] solver = SprinklerArea(size, n, pos) print(solver.solve())