#include <bits/stdc++.h>
using namespace std;
struct q {
  int g, p, t, id;
} r[111111];
bool s1(q u, q v) {
  if (u.t - u.p < v.t - v.p) return true;
  if (u.t - u.p > v.t - v.p) return false;
  if (u.g > v.g) return true;
  if (u.g < v.g) return false;
  if (u.g == 1 && u.p > v.p) return true;
  if (u.g == 0 && u.p < v.p) return true;
  return false;
}
bool s2(q u, q v) {
  if (u.g < v.g) return true;
  if (u.g > v.g) return false;
  if (u.g == 1 && u.p > v.p) return true;
  if (u.g == 0 && u.p < v.p) return true;
  return false;
}
int n, w, h, t[111111], dx[111111], dy[111111];
int main() {
  scanf("%d%d%d", &n, &w, &h);
  for (int i = 0; i < n; i++) {
    scanf("%d%d%d", &r[i].g, &r[i].p, &r[i].t);
    r[i].id = i, r[i].g--;
  }
  sort(r, r + n, s1);
  vector<int> x;
  for (int i = 0, j; i < n;) {
    x.clear();
    for (j = i; i < n && r[j].t - r[j].p == r[i].t - r[i].p; i++)
      x.push_back(r[i].id);
    sort(r + j, r + i, s2);
    for (int k = j; k < i; k++) {
      if (r[k].g == 0)
        dx[x[k - j]] = r[k].p, dy[x[k - j]] = h;
      else
        dy[x[k - j]] = r[k].p, dx[x[k - j]] = w;
    }
  }
  for (int i = 0; i < n; i++) printf("%d %d\n", dx[i], dy[i]);
  return 0;
}
