#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-10;
const int N = 1010;
struct node {
  long long val;
  int x, y;
  node() {}
  node(int _x, int _y, long long _val) : x(_x), y(_y), val(_val) {}
  friend bool operator<(node a, node b) {
    if (a.val < b.val) return 0;
    if (b.val < a.val) return 1;
    return a.x == b.x ? a.y > b.y : a.x > b.x;
  }
};
int n, m, a, b;
bool f[N][N];
int c[N][N], t[N][N];
long long val[N][N], sum[N][N];
inline void calcValue() {
  deque<int> P, Q;
  for (int i = 1; i <= n; ++i) {
    P.clear(), Q.clear();
    for (int j = 1; j <= m; ++j) {
      while (Q.size() && Q.back() > c[i][j]) Q.pop_back(), P.pop_back();
      if (P.size() && P.front() <= j - b) Q.pop_front(), P.pop_front();
      Q.push_back(c[i][j]), P.push_back(j);
      t[i][j] = Q.front();
    }
  }
  for (int j = 1; j <= m; ++j) {
    P.clear(), Q.clear();
    for (int i = 1; i <= n; ++i) {
      while (Q.size() && Q.back() > t[i][j]) Q.pop_back(), P.pop_back();
      if (P.size() && P.front() <= i - a) Q.pop_front(), P.pop_front();
      Q.push_back(t[i][j]), P.push_back(i);
      val[i][j] = Q.front();
    }
  }
}
priority_queue<node> Q;
inline void calcSum() {
  for (int i = 1; i <= n; ++i)
    for (int j = 1; j <= m; ++j)
      sum[i][j] = c[i][j] + sum[i][j - 1] + sum[i - 1][j] - sum[i - 1][j - 1];
  for (int i = a; i <= n; ++i)
    for (int j = b; j <= m; ++j) {
      val[i][j] = sum[i][j] - sum[i - a][j] - sum[i][j - b] +
                  sum[i - a][j - b] - val[i][j] * a * b;
      Q.push(node(i - a + 1, j - b + 1, val[i][j]));
    }
}
bool check(int x, int y) {
  return !f[x][y] && !f[x + a - 1][y] && !f[x][y + b - 1] &&
         !f[x + a - 1][y + b - 1];
}
vector<node> ans;
node temp;
inline void calcAns() {
  memset(f, 0, sizeof f);
  while (Q.size()) {
    while (Q.size() && !check(Q.top().x, Q.top().y)) Q.pop();
    if (!Q.size()) break;
    temp = Q.top();
    ans.push_back(temp);
    for (int i = 0; i < a; ++i)
      for (int j = 0; j < b; ++j) f[temp.x + i][temp.y + j] = 1;
  }
}
int main() {
  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", c[i] + j);
  calcValue();
  calcSum();
  calcAns();
  printf("%d\n", ans.size());
  for (__typeof(ans.begin()) it = ans.begin(); it != ans.end(); it++)
    printf("%d %d %lld\n", it->x, it->y, it->val);
  return 0;
}
