#include <bits/stdc++.h>
using namespace std;
const int N = 1005;
int n, m, A, B;
int a[N][N], f[N][N], g[N][N];
bool mp[N][N];
long long sum[N][N], w[N][N];
vector<pair<int, int> > ans, s;
deque<int> q;
void init() {
  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", &a[i][j]), sum[i][j] = a[i][j] + sum[i - 1][j] +
                                         sum[i][j - 1] - sum[i - 1][j - 1];
  for (int i = 1; i <= n; ++i) {
    q.clear();
    for (int j = 1; j < B; ++j) {
      while (!q.empty() && a[i][q.back()] >= a[i][j]) q.pop_back();
      q.push_back(j);
    }
    for (int j = 1; j + B - 1 <= m; ++j) {
      while (!q.empty() && q.front() < j) q.pop_front();
      while (!q.empty() && a[i][q.back()] >= a[i][j + B - 1]) q.pop_back();
      q.push_back(j + B - 1);
      f[i][j] = a[i][q.front()];
    }
  }
  for (int j = 1; j + B - 1 <= m; ++j) {
    q.clear();
    for (int i = 1; i < A; ++i) {
      while (!q.empty() && f[q.back()][j] >= f[i][j]) q.pop_back();
      q.push_back(i);
    }
    for (int i = 1; i + A - 1 <= n; ++i) {
      while (!q.empty() && q.front() < i) q.pop_front();
      while (!q.empty() && f[q.back()][j] >= f[i + A - 1][j]) q.pop_back();
      q.push_back(i + A - 1);
      g[i][j] = f[q.front()][j];
    }
  }
}
long long calc(int x, int y) {
  return sum[x + A - 1][y + B - 1] - sum[x - 1][y + B - 1] -
         sum[x + A - 1][y - 1] + sum[x - 1][y - 1] - 1ll * A * B * g[x][y];
}
bool cmp(pair<int, int> x, pair<int, int> y) {
  return w[x.first][x.second] == w[y.first][y.second]
             ? (x.first == y.first ? x.second < y.second : x.first < y.first)
             : w[x.first][x.second] < w[y.first][y.second];
}
bool check(int x, int y) {
  return mp[x][y] || mp[x + A - 1][y] || mp[x][y + B - 1] ||
         mp[x + A - 1][y + B - 1];
}
void target(int x, int y) {
  for (int i = x; i <= x + A - 1; ++i)
    for (int j = y; j <= y + B - 1; ++j) mp[i][j] = 1;
}
void solve() {
  for (int i = 1; i + A - 1 <= n; ++i)
    for (int j = 1; j + B - 1 <= m; ++j)
      w[i][j] = calc(i, j), s.push_back(make_pair(i, j));
  sort(s.begin(), s.end(), cmp);
  for (int i = 0; i < (int)s.size(); ++i) {
    int x = s[i].first, y = s[i].second;
    if (check(x, y)) continue;
    ans.push_back(make_pair(x, y));
    target(x, y);
  }
  printf("%d\n", (int)ans.size());
  for (int i = 0; i < (int)ans.size(); ++i)
    printf("%d %d %lld\n", ans[i].first, ans[i].second,
           w[ans[i].first][ans[i].second]);
}
int main() {
  init();
  solve();
  return 0;
}
