structure Set = struct datatype 'a tree = Leaf | Node of 'a * 'a tree * 'a tree val empty = Leaf fun size Leaf = 0 | size (Node (v, left, right)) = 1 + size left + size right fun add Leaf newV = Node (newV, Leaf, Leaf) | add (Node (nodeV, left, right)) newV = if nodeV = newV then (Node (nodeV, left, right)) else if nodeV < newV then Node (nodeV, left, add right newV) else Node (nodeV, add left newV, right) end fun readInt () = valOf (TextIO.scanStream (Int.scan StringCvt.DEC) TextIO.stdIn) val () = let val w = Int.toLarge (readInt ()) val h = Int.toLarge (readInt ()) val n = readInt () val sk_s = List.tabulate (n, fn _ => (readInt (), readInt())) val (s_s, k_s) = List.foldl (fn ((s, k), (accS, accK)) => (Set.add accS s, Set.add accK k)) (Set.empty, Set.empty) sk_s val ans = h * w - (w - (Int.toLarge (Set.size s_s))) * (h - (Int.toLarge (Set.size k_s))) - (Int.toLarge n) in print (LargeInt.toString ans ^ "\n") end