module S = Set.Make (struct type t = int let compare = (-) end) let () = let w, h, n = Scanf.scanf "%d %d %d " (fun w h n -> w, h, n) in let ss = Array.init w (fun _ -> let rec init i s = if i = h then s else S.add i s |> init (i + 1) in init 0 S.empty) in let a = Array.make w S.empty in let rec read i ks = if i = n then List.length ks else begin let s, k = Scanf.scanf "%d %d " (fun s k -> s, k) in let s, k = s - 1, k - 1 in a.(s) <- S.add (k) a.(s); read (i + 1) (if List.mem k ks then ks else k :: ks) end in let ks = read 0 [] in let rec doit i acc = if i = w then acc else if not (S.is_empty a.(i)) then begin let t = S.diff ss.(i) a.(i) in ss.(i) <- S.empty; doit (i + 1) (acc + S.cardinal t) end else doit (i + 1) (acc + ks) in doit 0 0 |> Printf.printf "%d\n"