#include <bits/stdc++.h>
using namespace std;
long long sum[1002][1002];
array<long long, 3> order[1000 * 1000];
bool done[1000][1000];
int h[1000][1000];
int m0[1000][1000];
int m1[1000][1000];
int main() {
  int n, m, a, b;
  scanf("%d%d%d%d", &n, &m, &a, &b);
  deque<int> deq;
  for (int i = 0; i < n; i++) {
    deq.clear();
    for (int j = 0; j < m; j++) {
      scanf("%d", &(h[i][j]));
      if (deq.size() && deq.front() <= j - b) {
        deq.pop_front();
      }
      while (deq.size() && h[i][deq.back()] >= h[i][j]) {
        deq.pop_back();
      }
      deq.push_back(j);
      m0[i][j] = h[i][deq.front()];
      sum[i + 1][j + 1] = sum[i + 1][j] + h[i][j];
    }
  }
  for (int j = 0; j < m; j++) {
    deq.clear();
    for (int i = 0; i < n; i++) {
      if (deq.size() && deq.front() <= i - a) {
        deq.pop_front();
      }
      while (deq.size() && m0[deq.back()][j] >= m0[i][j]) {
        deq.pop_back();
      }
      deq.push_back(i);
      m1[i][j] = m0[deq.front()][j];
      sum[i + 1][j + 1] += sum[i][j + 1];
    }
  }
  int k = 0;
  for (int i = 0; i + a <= n; i++) {
    for (int j = 0; j + b <= m; j++) {
      order[k] = array<long long, 3>{
          {sum[i + a][j + b] - sum[i + a][j] - sum[i][j + b] + sum[i][j] -
               m1[i + a - 1][j + b - 1] * (long long)a * b,
           i, j}};
      k++;
    }
  }
  sort(order, order + k);
  int pos = 0;
  for (int i = 0; i < k; i++) {
    array<long long, 3> e = order[i];
    if (!done[e[1]][e[2]]) {
      int lx = max(0, (int)e[1] - a + 1);
      int hx = min(n, (int)e[1] + a);
      int ly = max(0, (int)e[2] - b + 1);
      int hy = min(m, (int)e[2] + b);
      for (int x = lx; x < hx; x++) {
        for (int y = ly; y < hy; y++) {
          done[x][y] = true;
        }
      }
      order[pos] = e;
      pos++;
    }
  }
  printf("%d\n", pos);
  for (int i = 0; i < pos; i++) {
    printf("%lld %lld %lld\n", order[i][1] + 1, order[i][2] + 1, order[i][0]);
  }
  return 0;
}
