#include <bits/stdc++.h>
using namespace std;
template <class A, class B>
A cvt(B x) {
  stringstream ss;
  ss << x;
  A y;
  ss >> y;
  return y;
}
int n, m, a, b;
int h[1001][1001];
int mb[1001][1001];
int mab[1001][1001];
long long sum[1001][1001];
long long cost[1001][1001];
char mark[1001][1001];
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", &h[i][j]);
    }
  for (int i = (1); i <= (n); i++) {
    for (int j = (1); j <= (m); j++) {
      sum[i][j] = h[i][j] + sum[i][j - 1] + sum[i - 1][j] - sum[i - 1][j - 1];
    }
  }
  for (int i = (1); i <= (n); i++) {
    multiset<int> s;
    for (int j = (1); j <= (m); j++) {
      s.insert(h[i][j]);
      if ((int)s.size() > b) s.erase(s.find(h[i][j - b]));
      if ((int)s.size() == b) {
        mb[i][j - b + 1] = *s.begin();
      }
    }
  }
  for (int j = (1); j <= (m - b + 1); j++) {
    multiset<int> s;
    for (int i = (1); i <= (n); i++) {
      s.insert(mb[i][j]);
      if ((int)s.size() > a) s.erase(s.find(mb[i - a][j]));
      if ((int)s.size() == a) {
        mab[i - a + 1][j] = *s.begin();
      }
    }
  }
  vector<pair<long long, pair<int, int> > > loc;
  for (int i = (1); i <= (n - a + 1); i++) {
    for (int j = (1); j <= (m - b + 1); j++) {
      cost[i][j] = sum[i + a - 1][j + b - 1] - sum[i - 1][j + b - 1] -
                   sum[i + a - 1][j - 1] + sum[i - 1][j - 1];
      cost[i][j] -= (long long)(a * b) * mab[i][j];
      loc.push_back({cost[i][j], {i, j}});
    }
  }
  sort((loc).begin(), (loc).end());
  vector<pair<long long, pair<int, int> > > out;
  for (auto l : loc) {
    int y = l.second.first, x = l.second.second;
    if (mark[y][x] || mark[y + a - 1][x] || mark[y][x + b - 1] ||
        mark[y + a - 1][x + b - 1])
      continue;
    out.push_back(l);
    for (int i = 0; i < (int)(a); i++)
      for (int j = 0; j < (int)(b); j++) mark[y + i][x + j] = 1;
  }
  printf("%d\n", (int)out.size());
  for (auto l : out) {
    printf("%d %d %I64d\n", l.second.first, l.second.second, l.first);
  }
  return 0;
}
