#include <bits/stdc++.h>
using namespace std;
const int N = 1005;
long long sum[N][N];
int spt[11][N][N], mn[N][N], arr[N][N];
bool visit[N][N];
int n, m, a, b, x;
void buildSparse() {
  int LN = log2(n) + 1, LM = log2(m) + 1;
  for (int lg = 1; lg <= LM; lg++)
    for (int i = 1; i <= n; i++)
      for (int j = 1; j <= m; j++)
        spt[lg][i][j] =
            min(spt[lg - 1][i][j], spt[lg - 1][i][j + (1 << (lg - 1))]);
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++) {
      sum[i][j] += sum[i - 1][j];
      if (j >= b) {
        int lg = log2(b), l = j - b + 1, r = j - (1 << lg) + 1;
        mn[i][j] = min(spt[lg][i][l], spt[lg][i][r]);
      }
    }
  for (int i = 1; i <= n; i++)
    for (int j = b; j <= m; j++) spt[0][i][j] = mn[i][j];
  for (int lg = 1; lg <= LN; lg++)
    for (int i = 1; i <= n; i++)
      for (int j = b; j <= m; j++)
        spt[lg][i][j] =
            min(spt[lg - 1][i][j], spt[lg - 1][i + (1 << (lg - 1))][j]);
}
long long getRemoved(int i, int j) {
  int lg = log2(a), l = i - a + 1;
  int r = i - (1 << lg) + 1;
  long long minn = min(spt[lg][l][j], spt[lg][r][j]), aa = a, bb = b;
  long long res = sum[i][j] - sum[i - a][j] - sum[i][j - b] +
                  sum[i - a][j - b] - aa * bb * minn;
  return res;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> m >> a >> b;
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++) {
      cin >> arr[i][j];
      spt[0][i][j] = arr[i][j];
      sum[i][j] += sum[i][j - 1] + arr[i][j];
    }
  }
  buildSparse();
  vector<pair<long long, pair<int, int>>> v, ans;
  for (int i = a; i <= n; i++)
    for (int j = b; j <= m; j++) v.push_back({getRemoved(i, j), {i, j}});
  sort(v.begin(), v.end());
  for (int i = 0; i < v.size(); i++) {
    int x = v[i].second.first - a + 1, y = v[i].second.second - b + 1;
    if (!visit[x][y] && !visit[x + a - 1][y] && !visit[x][y + b - 1] &&
        !visit[x + a - 1][y + b - 1]) {
      ans.push_back({v[i].first, {x, y}});
      for (int j = 0; j < a; j++)
        for (int k = 0; k < b; k++) visit[x + j][y + k] = true;
    }
  }
  cout << ans.size() << endl;
  for (int i = 0; i < ans.size(); i++)
    cout << ans[i].second.first << ' ' << ans[i].second.second << ' '
         << ans[i].first << '\n';
  return 0;
}
