#nullable enable using System.Numerics; int n, xMax, yMax; { var input = Console.ReadLine()!.Split(' '); n = int.Parse(input[0]); xMax = int.Parse(input[1]); yMax = int.Parse(input[2]); } var xz = new long[n]; var yz = new long[n]; for (var i = 0; i < n; i++) { var input = Console.ReadLine()!.Split(' '); xz[i] = int.Parse(input[0]); yz[i] = int.Parse(input[1]); } var ans = 0L; for (var _i = 0; _i < 2; _i++) { var candidates = new List(); var g = new Complex(0, 0); foreach (var x in xz) { var arg = (double)(x - 1) / xMax * Math.PI * 2; g -= new Complex(Math.Cos(arg), Math.Sin(arg)) / n; } var c = 0; if (g.Magnitude > 1.0e-13) c = (int)(g.Phase / (Math.PI * 2) * xMax); var best = 0L; for (var i = -1; i <= 1; i++) { var t = (c + i + xMax) % xMax + 1; var score = 0L; foreach (var x in xz) { var l = Math.Min(x, t); var r = Math.Max(x, t); score += Math.Min(r - l, xMax - r + l); } best = Math.Max(best, score); } ans += best; (xMax, yMax) = (yMax, xMax); (xz, yz) = (yz, xz); } Console.WriteLine(ans);