#include <bits/stdc++.h>   using namespace std;   const int maxn = 1000 + 10;   long long n, m, a, b;   long long arr[maxn][maxn];   long long sum[maxn][maxn];   long long Min[maxn][maxn];   set<pair<long long, pair<long long, long long> > > s;   multiset<long long> s_;   long long minr[maxn][maxn];   long long ground[maxn][maxn];   vector<pair<long long, pair<long long, long long> > > ans;   inline long long find_sum(pair<long long, long long> fi,                             pair<long long, long long> se) {     long long ret = sum[fi.first][fi.second];     ret += sum[se.first + 1][se.second + 1];     ret -= sum[se.first + 1][fi.second];     ret -= sum[fi.first][se.second + 1];     return ret;   }   inline void make_sum() {     for (int i = n; i >= 1; --i)       for (int j = m; j >= 1; --j)         sum[i][j] = sum[i + 1][j] + sum[i][j + 1] - sum[i + 1][j + 1] + arr[i][j];   }   inline void update_minr() {     for (int i = 1; i <= n; ++i) {       s_.clear();       for (int j = 1; j <= b; ++j) s_.insert(arr[i][j]);       for (int j = 1; j <= m - b + 1; ++j) {         long long mini = *s_.begin();         minr[i][j] = mini;         s_.erase(s_.find(arr[i][j]));         s_.insert(arr[i][j + b]);       }     }   }   inline void make_Min() {     update_minr();     for (int j = 1; j <= m - b + 1; ++j) {       s_.clear();       for (int i = 1; i <= a; ++i) s_.insert(minr[i][j]);       for (int i = 1; i <= n - a + 1; ++i) {         long long mini = *s_.begin();         Min[i][j] = mini;         s_.erase(s_.find(minr[i][j]));         s_.insert(minr[i + a][j]);       }     }   }   vector<pair<long long, pair<long long, long long> > > v;   int vis[maxn][maxn];   inline void remove(long long r, long long c) {     for (int i = r; i <= r + a - 1; ++i)       for (int j = c; j <= c + b - 1; ++j) vis[i][j] = 1;     for (int i = r - 1; i >= 1 && i >= r - a + 1; --i)       for (int j = c; j <= c + b - 1; ++j) vis[i][j] = 1;     for (int i = r; i <= r + a - 1; ++i)       for (int j = c - 1; j >= 1 && j >= c - b + 1; --j) vis[i][j] = 1;     for (int i = r - 1; i >= 1 && i >= r - a + 1; --i)       for (int j = c - 1; j >= 1 && j >= c - b + 1; --j) vis[i][j] = 1;   }   int main() {     ios_base::sync_with_stdio(false);     cin >> n >> m >> a >> b;     for (int i = 1; i <= n; ++i)       for (int j = 1; j <= m; ++j) cin >> arr[i][j];     make_sum();     make_Min();     for (int i = 1; i <= n - a + 1; ++i)       for (int j = 1; j <= m - b + 1; ++j)         ground[i][j] =             find_sum(pair<long long, long long>(i, j),                      pair<long long, long long>(i + a - 1, j + b - 1)) -             (a * b * Min[i][j]);     v.clear();     for (int i = 1; i <= n - a + 1; ++i)       for (int j = 1; j <= m - b + 1; ++j)         v.push_back(pair<long long, pair<long long, long long> >(             ground[i][j], pair<long long, long long>(i, j)));     sort(v.begin(), v.end());     for (int i = 0; i < v.size(); ++i)       if (vis[v[i].second.first][v[i].second.second] == 0) {         long long X, Y;         X = v[i].second.first;         Y = v[i].second.second;         ans.push_back(pair<long long, pair<long long, long long> >(             ground[X][Y], pair<long long, long long>(X, Y)));         remove(X, Y);       }     cout << ans.size() << endl;     for (int i = 0; i < ans.size(); ++i)       cout << ans[i].second.first <<     << ans[i].second.second <<                << ans[i].first << endl;     return 0;   }