fun readInt () = valOf (TextIO.scanStream (Int.scan StringCvt.DEC) TextIO.stdIn) fun readLargeInt () = valOf (TextIO.scanStream (LargeInt.scan StringCvt.DEC) TextIO.stdIn) val () = let val n = readInt () val ab_s = List.tabulate (n, fn _ => (readLargeInt (), readLargeInt ())) val remType = (#1 (List.hd ab_s)) mod 2 val findMaxResult = List.foldl (fn ((a, b), acc) => case acc of NONE => NONE | SOME min => if a mod 2 = remType then ( if min < a + 4 * b then SOME (a + 4 * b) else SOME min ) else NONE) (SOME 0) ab_s val ans = case findMaxResult of NONE => "-1" | SOME max => LargeInt.toString (List.foldl (fn ((a, b), acc) => acc + ((max - (a + 4 * b)) div 2)) 0 ab_s ) in print (ans ^ "\n") end