#include <bits/stdc++.h>
using namespace std;
const int maxn = 1111;
int N, M, aa, bb, A[maxn][maxn], B[maxn][maxn], C[maxn][maxn], Q[maxn],
    sz[maxn][maxn];
long long S[maxn][maxn];
struct hhh {
  long long a;
  int b, c;
} stk[maxn * maxn];
bool operator<(const hhh &x, const hhh &y) {
  if (x.a != y.a) return x.a > y.a;
  if (x.b != y.b) return x.b > y.b;
  return x.c > y.c;
}
priority_queue<hhh> QQ;
void Add(int x, int y) {
  for (int xx = x; xx <= N; xx += xx & (-xx))
    for (int yy = y; yy <= M; yy += yy & (-yy)) ++sz[xx][yy];
}
int Qry(int x, int y) {
  int ans = 0;
  for (int xx = x; xx; xx -= xx & (-xx))
    for (int yy = y; yy; yy -= yy & (-yy)) ans += sz[xx][yy];
  return ans;
}
void color(int x, int y) {
  for (int i = x; i < x + aa; ++i)
    for (int j = y; j < y + bb; ++j) Add(i, j);
}
int main() {
  scanf("%d%d%d%d", &N, &M, &aa, &bb);
  for (int i = 1; i <= N; ++i)
    for (int j = 1; j <= M; ++j)
      scanf("%d", &A[i][j]),
          S[i][j] = S[i][j - 1] + S[i - 1][j] - S[i - 1][j - 1] + A[i][j];
  for (int i = 1; i <= N; ++i) {
    int l = 1, r = 0;
    for (int j = 1; j <= M; ++j) {
      while (l <= r && j - Q[l] >= bb) ++l;
      while (l <= r && A[i][j] <= A[i][Q[r]]) --r;
      Q[++r] = j;
      B[i][j] = A[i][Q[l]];
    }
  }
  for (int j = 1; j <= M; ++j) {
    int l = 1, r = 0;
    for (int i = 1; i <= N; ++i) {
      while (l <= r && i - Q[l] >= aa) ++l;
      while (l <= r && B[i][j] <= B[Q[r]][j]) --r;
      Q[++r] = i;
      C[i][j] = B[Q[l]][j];
    }
  }
  for (int i = aa; i <= N; ++i) {
    for (int j = bb; j <= M; ++j) {
      int xx = i - aa + 1, yy = j - bb + 1;
      QQ.push((hhh){S[i][j] - S[i][yy - 1] - S[xx - 1][j] + S[xx - 1][yy - 1] -
                        (long long)C[i][j] * aa * bb,
                    xx, yy});
    }
  }
  int T = 0;
  while (!QQ.empty()) {
    hhh q = QQ.top();
    QQ.pop();
    int xx = q.b, yy = q.c;
    if (Qry(xx + aa - 1, yy + bb - 1) - Qry(xx - 1, yy + bb - 1) -
            Qry(xx + aa - 1, yy - 1) + Qry(xx - 1, yy - 1) ==
        0) {
      stk[++T] = q;
      color(xx, yy);
    }
  }
  printf("%d\n", T);
  for (int i = 1; i <= T; ++i)
    printf("%d %d %lld\n", stk[i].b, stk[i].c, stk[i].a);
  return 0;
}
