#include <bits/stdc++.h>
using namespace std;
const int N = 1e3 + 5;
int n, m, W, H, a[N][N], b[N][N];
long long s[N][N];
int q[N];
inline long long S(int x1, int y1, int x2, int y2) {
  return s[x2][y2] - s[x1 - 1][y2] - s[x2][y1 - 1] + s[x1 - 1][y1 - 1];
}
struct BIT {
  int c[N][N];
  inline void add(int x1, int y1, int x2, int y2) {
    add(x2, y2);
    add(x1, y2);
    add(x2, y1);
    add(x1, y1);
  }
  inline void add(int x, int y) {
    for (int i = x + 1; i <= n + 1; i += i & -i)
      for (int j = y + 1; j <= m + 1; j += j & -j) c[i][j]++;
  }
  inline int qry(int x, int y) {
    int ret = 0;
    for (int i = x + 1; i; i -= i & -i)
      for (int j = y + 1; j; j -= j & -j) ret += c[i][j];
    return ret;
  }
  inline int qry(int x1, int y1, int x2, int y2) {
    return qry(x2, y2) - qry(x1 - 1, y2) - qry(x2, y1 - 1) +
           qry(x1 - 1, y1 - 1);
  }
} bit;
int tot, X[N * N], Y[N * N];
long long V[N * N];
int main() {
  scanf("%d%d%d%d", &n, &m, &W, &H);
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++)
      scanf("%d", &a[i][j]),
          s[i][j] = s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1] + a[i][j];
  for (int i = 1; i <= n; i++) {
    int h = 1, t = 0;
    for (int j = 1; j <= m; j++) {
      while (h <= t && j - q[h] >= H) h++;
      while (h <= t && a[i][j] <= a[i][q[t]]) t--;
      q[++t] = j;
      b[i][j] = a[i][q[h]];
    }
  }
  for (int j = 1; j <= m; j++) {
    int h = 1, t = 0;
    for (int i = 1; i <= n; i++) {
      while (h <= t && i - q[h] >= W) h++;
      while (h <= t && b[i][j] <= b[q[t]][j]) t--;
      q[++t] = i;
      a[i][j] = b[q[h]][j];
    }
  }
  vector<pair<long long, int> > v;
  for (int i = W; i <= n; i++)
    for (int j = H; j <= m; j++)
      v.push_back(pair<long long, int>(
          S(i - W + 1, j - H + 1, i, j) - 1ll * W * H * a[i][j],
          (i - 1) * m + j));
  sort(v.begin(), v.end());
  for (int i = 0, sz = v.size(); i < sz; i++) {
    int y = (v[i].second - 1) % m + 1, x = (v[i].second - y) / m + 1;
    if (bit.qry(x - W + 1, y - H + 1, x, y)) continue;
    tot++;
    X[tot] = x - W + 1;
    Y[tot] = y - H + 1;
    V[tot] = v[i].first;
    bit.add(x - W + 1, y - H + 1, x, y);
  }
  printf("%d\n", tot);
  for (int i = 1; i <= tot; i++) printf("%d %d %lld\n", X[i], Y[i], V[i]);
  return 0;
}
