#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const int maxn = 105;
int dx[4] = {0, 1, -1, 0};
int dy[4] = {1, 0, 0, -1};
int m, n, sx, sy, cnt = 0;
int t[maxn][maxn];
vector<pair<int, int> > v;
void solve(int a, int b) {
  memset(t, -1, sizeof(t));
  int remain = m * n - 1;
  t[a][b] = ++cnt;
  v.push_back(pair<int, int>(a, b));
  while (remain) {
    int L = 0, R = 0, U = 0, D = 0;
    for (int i = a + 1; i <= n; i++) {
      if (t[i][b] == -1) {
        t[i][b] = ++cnt;
        remain--;
        a = i;
        v.push_back(pair<int, int>(a, b));
        D = 1;
        break;
      }
    }
    if (D) continue;
    for (int i = a - 1; i >= 1; i--) {
      if (t[i][b] == -1) {
        t[i][b] = ++cnt;
        remain--;
        a = i;
        v.push_back(pair<int, int>(a, b));
        U = 1;
        break;
      }
    }
    if (U) continue;
    for (int i = b + 1; i <= m; i++) {
      if (t[a][i] == -1) {
        t[a][i] = ++cnt;
        remain--;
        b = i;
        v.push_back(pair<int, int>(a, b));
        R = 1;
        break;
      }
    }
    if (R) continue;
    for (int i = b - 1; i >= 1; i--) {
      if (t[a][i] == -1) {
        t[a][i] = ++cnt;
        remain--;
        b = i;
        v.push_back(pair<int, int>(a, b));
        L = 1;
        break;
      }
    }
    if (L) continue;
  }
}
int main() {
  scanf("%d%d%d%d", &n, &m, &sx, &sy);
  solve(sx, sy);
  for (int i = 0; i < cnt; i++) {
    cout << v[i].first << " " << v[i].second << endl;
  }
  return 0;
}
