using System.Collections.Generic;
public static void Main()
string[] line = Console.ReadLine().Split(' ');
int n = int.Parse(line[0]);
int m = int.Parse(line[1]);
int a = int.Parse(line[2]);
int b = int.Parse(line[3]);
int[,] heights = new int[n, m];
for(int i = 0; i < n; i++)
line = Console.ReadLine().Split(' ');
for(int j = 0; j < m; j++)
heights[i, j] = int.Parse(line[j]);
var sites = new List<Site>();
for(int i = 0; i < n - a + 1; i++)
for(int j = 0; j < m - b + 1; j++)
int minHeight = int.MaxValue;
for(int p = 0; p < a; p++)
for(int q = 0; q < b; q++)
if(heights[i + p, j + q] < minHeight)
minHeight = heights[i + p, j + q];
for(int p = 0; p < a; p++)
for(int q = 0; q < b; q++)
gUnits += (heights[i + p, j + q] - minHeight);
var site = new Site(i, j, gUnits);
var sortSites = sites.OrderBy(s => s.GUnits).ToList();
var cities = new List<Site>();
bool[,] occupied = new bool[n, m];
foreach(var site in sortSites)
for(int i = 0; i < a; i++)
for(int j = 0; j < b; j++)
if(occupied[site.N + i, site.M + j])
for(int i = 0; i < a; i++)
for(int j = 0; j < b; j++)
occupied[site.N + i, site.M + j] = true;
Console.WriteLine(cities.Count);
foreach(var city in cities)
Console.Write((city.N + 1) + " ");
Console.Write((city.M + 1) + " ");
Console.WriteLine(city.GUnits);
public int GUnits{get;set;}
public Site(int n, int m, int gUnits)