#include <bits/stdc++.h>
using namespace std;
void dfs(vector<vector<int> >& adjList, vector<bool>& explored, int src);
void bfs(vector<vector<int> >& adjList, vector<bool>& explored, int src);
int main(void) {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int n, m;
  cin >> n >> m;
  int sx, sy;
  cin >> sx >> sy;
  cout << sx << " " << sy << endl << 1 << " " << sy << endl;
  for (int i = 1; i <= n; i++) {
    if (i % 2 == 1) {
      for (int j = 1; j <= m; j++) {
        if (i == sx && j == sy)
          continue;
        else if (i == 1 && j == sy)
          continue;
        else {
          cout << i << " " << j << endl;
        }
      }
    } else {
      for (int j = m; j >= 1; j--) {
        if (i == sx && j == sy)
          continue;
        else if (i == 1 && j == sy)
          continue;
        else {
          cout << i << " " << j << endl;
        }
      }
    }
  }
  return 0;
}
void dfs(vector<vector<int> >& adjList, vector<bool>& explored, int src) {
  explored.at(src - 1) = true;
  for (int i = 0, j = adjList.at(src - 1).size(); i < j; i++) {
    if (!explored.at(adjList.at(src - 1).at(i) - 1)) {
      dfs(adjList, explored, adjList.at(src - 1).at(i));
    }
  }
  return;
}
void bfs(vector<vector<int> >& adjList, vector<bool>& explored, int src) {
  explored.at(src - 1) = true;
  queue<int> q;
  q.push(src);
  while (!q.empty()) {
    int temp = q.front();
    q.pop();
    for (int i = 0, j = adjList.at(temp - 1).size(); i < j; i++) {
      if (!explored.at(adjList.at(temp - 1).at(i) - 1)) {
        explored.at(adjList.at(temp - 1).at(i) - 1) = true;
        q.push(adjList.at(temp - 1).at(i));
      }
    }
  }
}
