#include <bits/stdc++.h>
using namespace std;
int v[1005][1005];
long long c[1005][1005], sum[1005][1005], t[1005][1005];
int main() {
  int n = 0, m = 0, a = 0, b = 0;
  scanf("%d%d%d%d", &n, &m, &a, &b);
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= m; ++j) {
      scanf("%d", &v[i][j]);
      sum[i][j] = sum[i][j - 1] + sum[i - 1][j] - sum[i - 1][j - 1] +
                  (long long)v[i][j];
    }
  }
  vector<pair<long long, pair<int, int>>> res;
  set<pair<long long, pair<int, int>>> cost;
  for (int i = 1; i <= n; ++i) {
    deque<long long> q;
    for (int j = m; j >= 1; --j) {
      while (!q.empty() && v[i][q.back()] > v[i][j]) {
        q.pop_back();
      }
      q.push_back(j);
      while (q.front() >= j + b) {
        q.pop_front();
      }
      t[i][j] = v[i][q.front()];
    }
  }
  for (int i = 1; i <= m; ++i) {
    deque<long long> q;
    for (int j = n; j >= 1; --j) {
      while (!q.empty() && t[q.back()][i] > t[j][i]) {
        q.pop_back();
      }
      q.push_back(j);
      while (q.front() >= j + a) {
        q.pop_front();
      }
      c[j][i] = t[q.front()][i];
    }
  }
  for (int i = 1; i + a - 1 <= n; ++i) {
    for (int j = 1; j + b - 1 <= m; ++j) {
      long long tmp = sum[i + a - 1][j + b - 1] - sum[i + a - 1][j - 1] -
                      sum[i - 1][j + b - 1] + sum[i - 1][j - 1] -
                      (long long)a * b * c[i][j];
      cost.insert(make_pair(tmp, make_pair(i, j)));
    }
  }
  auto it = cost.begin();
  while (it != cost.end()) {
    while (it != cost.end() && c[it->second.first][it->second.second] == -1) {
      ++it;
    }
    if (it == cost.end()) {
      break;
    }
    res.push_back(*it);
    int row = it->second.first, col = it->second.second;
    int rMin = max(row - a + 1, 0), cMin = max(col - b + 1, 0),
        rMax = min(row + a - 1, n - (a - 1)),
        cMax = min(col + b - 1, m - (b - 1));
    for (int i = rMin; i <= rMax; ++i) {
      for (int j = cMin; j <= cMax; ++j) {
        c[i][j] = -1;
      }
    }
  }
  printf("%d\n", res.size());
  for (int i = 0; i < res.size(); ++i) {
    printf("%d %d %I64d\n", res[i].second.first, res[i].second.second,
           res[i].first);
  }
  return 0;
}
