#include <bits/stdc++.h>
using namespace std;
using LL = long long;
const long long N = 1001;
long long v[N][N], idx[N][N], sum[N][N], bit[N][N];
long long get(long long x1, long long y1, long long x2, long long y2) {
  return sum[x2][y2] - sum[x1 - 1][y2] - sum[x2][y1 - 1] + sum[x1 - 1][y1 - 1];
}
void modify(long long t[], long long i, long long x) {
  for (long long j = i; j < N; j += j & -j) t[j] += x;
}
long long query(long long t[], long long i) {
  long long r = 0;
  for (long long j = i; j > 0; j -= j & -j) r += t[j];
  return r;
}
int32_t main() {
  ios_base ::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  long long n, m, a, b;
  cin >> n >> m >> a >> b;
  for (long long i = 1; i <= n; i++) {
    for (long long j = 1; j <= m; j++) {
      cin >> v[i][j];
      sum[i][j] = sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1] + v[i][j];
    }
  }
  for (long long i = 1; i <= n; i++) {
    deque<long long> dq;
    for (long long j = 1; j <= m; j++) {
      while (dq.size() && dq.front() < j - b + 1) dq.pop_front();
      while (dq.size() && v[i][dq.back()] >= v[i][j]) dq.pop_back();
      dq.push_back(j);
      idx[i][j] = dq.front();
    }
    for (long long j = m; j >= 1; j--) {
      v[i][j] = v[i][idx[i][j]];
    }
  }
  for (long long j = 1; j <= m; j++) {
    deque<long long> dq;
    for (long long i = 1; i <= n; i++) {
      while (dq.size() && dq.front() < i - a + 1) dq.pop_front();
      while (dq.size() && v[dq.back()][j] >= v[i][j]) dq.pop_back();
      dq.push_back(i);
      idx[i][j] = dq.front();
    }
    for (long long i = n; i >= 1; i--) {
      v[i][j] = v[idx[i][j]][j];
    }
  }
  vector<tuple<long long, long long, long long> > c, ans;
  for (long long i = 1; i + a - 1 <= n; i++) {
    for (long long j = 1; j + b - 1 <= m; j++) {
      c.push_back(make_tuple(
          get(i, j, i + a - 1, j + b - 1) - v[i + a - 1][j + b - 1] * a * b, i,
          j));
    }
  }
  sort(c.begin(), c.end());
  for (auto [z, x, y] : c)
    if (!query(bit[x], y)) {
      ans.push_back(make_tuple(x, y, z));
      for (long long i = x - a + 1; i <= x + a - 1; i++)
        if (i > 0) {
          long long l = y - b + 1, r = y + b;
          modify(bit[i], max(1LL, l), +1);
          if (r <= m) modify(bit[i], r, -1);
        }
    }
  cout << ans.size() << "\n";
  for (auto [x, y, z] : ans) {
    cout << x << " " << y << " " << z << "\n";
  }
}
