#include <bits/stdc++.h>
using namespace std;
const int N = 1002;
int n, m, a, b, g[N][N], szCosts, szAns;
int mnCol[N][N];
bool T_T[N][N];
long long dp[N][N], mn[N][N];
pair<long long, pair<int, int> > costs[N * N], ans[N * N];
inline long long querySum(int x1, int x2, int y1, int y2) {
  return dp[x2][y2] - dp[x1 - 1][y2] - dp[x2][y1 - 1] + dp[x1 - 1][y1 - 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", &g[i][j]);
      dp[i][j] = g[i][j] + dp[i - 1][j] + dp[i][j - 1] - dp[i - 1][j - 1];
    }
  for (int j = 1; j <= m; ++j) {
    deque<pair<int, int> > q;
    for (int i = n; i >= 1; --i) {
      while (((int)(q).size()) and q.front().second >= i + a) q.pop_front();
      while (((int)(q).size()) and
             (q.back().second >= i + a or g[i][j] <= q.back().first))
        q.pop_back();
      q.push_back({g[i][j], i});
      mnCol[i][j] = q.front().first;
    }
  }
  for (int i = 1; i <= n - a + 1; ++i) {
    deque<pair<int, int> > q;
    for (int j = m; j >= 1; --j) {
      while (((int)(q).size()) and q.front().second >= j + b) q.pop_front();
      while (((int)(q).size()) and
             (q.back().second >= j + b or mnCol[i][j] <= q.back().first))
        q.pop_back();
      q.push_back({mnCol[i][j], j});
      mn[i][j] = q.front().first;
    }
  }
  for (int i = 1; i <= n - a + 1; ++i)
    for (int j = 1; j <= m - b + 1; ++j)
      costs[++szCosts] =
          make_pair(querySum(i, i + a - 1, j, j + b - 1) - mn[i][j] * a * b,
                    make_pair(i, j));
  sort(costs + 1, costs + 1 + szCosts);
  for (int idx = 1; idx <= szCosts; ++idx) {
    int i = costs[idx].second.first, j = costs[idx].second.second;
    if (T_T[i][j]) continue;
    ans[++szAns] = costs[idx];
    int q = max(1, i - a + 1), w = min(n - a + 1, i + a - 1);
    int o = max(1, j - b + 1), p = min(j + b - 1, m - b + 1);
    for (int r = q; r <= w; ++r)
      for (int c = o; c <= p; ++c) T_T[r][c] = true;
  }
  printf("%d\n", szAns);
  for (int i = 1; i <= szAns; ++i)
    printf("%d %d %I64d\n", ans[i].second.first, ans[i].second.second,
           ans[i].first);
}
