C# easy solution
\npublic class Solution {\n    public int[][] SolutionPoints { get; set; }\n    public SortedDictionary<int, int> RectangleByArea = new SortedDictionary<int, in
```\npublic class Solution {\n    public int[][] SolutionPoints { get; set; }\n    public SortedDictionary<int, int> RectangleByArea = new SortedDictionary<int, int>();\n    public int NumberOfSolutions { get; set; }\n    public Random Random = new Random();\n    \n    public Solution(int[][] rects)\n    {\n        SolutionPoints = rects;\n        for (var i = 0 ; i < rects.Length ; i++)\n        {\n            var rect = rects[i];\n            NumberOfSolutions += (rect[2] - rect[0] + 1) * (rect[3] - rect[1] + 1);\n            RectangleByArea.Add(NumberOfSolutions, i);\n        }\n    }\n\n    public int[] Pick()\n    {\n        var randomNumber = Random.Next(NumberOfSolutions) + 1;\n        var rectangleIndex = RectangleByArea.First(x => x.Key >= randomNumber).Value;\n\n        return Pick(SolutionPoints[rectangleIndex]);\n    }\n    public int[] Pick(int[] rectangle)\n    {\n        var x = Random.Next(rectangle[0], rectangle[2] + 1);\n        var y = Random.Next(rectangle[1], rectangle[3] + 1);\n        return new[] { x, y };\n    }\n}\n```
[]