#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void qread(T& x) {
  char c;
  bool f = 0;
  while ((c = getchar()) < '0' || '9' < c) f |= (c == '-');
  for (x = (c ^ 48); '0' <= (c = getchar()) && c <= '9';
       x = (x << 1) + (x << 3) + (c ^ 48))
    ;
  if (f) x = -x;
}
inline int qread() {
  int x = 0;
  char c;
  bool f = 0;
  while ((c = getchar()) < '0' || '9' < c) f |= (c == '-');
  for (x = (c ^ 48); '0' <= (c = getchar()) && c <= '9';
       x = (x << 1) + (x << 3) + (c ^ 48))
    ;
  return f ? -x : x;
}
template <class T>
inline T Max(const T x, const T y) {
  return x > y ? x : y;
}
template <class T>
inline T Min(const T x, const T y) {
  return x < y ? x : y;
}
template <class T>
inline T fab(const T x) {
  return x > 0 ? x : -x;
}
inline int gcd(const int a, const int b) { return b ? gcd(b, a % b) : a; }
inline void getInv(int inv[], const int lim, const int MOD) {
  inv[0] = inv[1] = 1;
  for (int i = 2; i <= lim; ++i)
    inv[i] = 1ll * inv[MOD % i] * (MOD - MOD / i) % MOD;
}
template <class T>
void fwrit(const T x) {
  if (x < 0) return (void)(putchar('-'), fwrit(-x));
  if (x > 9) fwrit(x / 10);
  putchar(x % 10 ^ 48);
}
inline long long mulMod(const long long a, const long long b,
                        const long long mod) {
  return ((a * b - (long long)((long double)a / mod * b + 1e-8) * mod) % mod +
          mod) %
         mod;
}
const int MAXN = 1e5;
vector<pair<int, int> > v[2][(MAXN << 1) + 5];
pair<int, int> ans[MAXN + 5];
int n, w, h, s0, s1;
signed main() {
  n = qread(), w = qread(), h = qread();
  for (int i = 1, g, p, t; i <= n; ++i) {
    g = qread() - 1, p = qread(), t = qread();
    v[g][p - t + MAXN].push_back(make_pair(p, i));
  }
  for (signed i = 0, i_end_ = MAXN << 1; i <= i_end_; ++i) {
    sort(v[0][i].begin(), v[0][i].end());
    sort(v[1][i].begin(), v[1][i].end());
    s0 = v[0][i].size(), s1 = v[1][i].size();
    for (int j = 0; j < s0; ++j)
      if (s0 - j - 1 >= s1)
        ans[v[0][i][j].second] = make_pair(v[0][i][j + s1].first, h);
      else
        ans[v[0][i][j].second] = make_pair(w, v[1][i][s0 - j - 1].first);
    for (int j = 0; j < s1; ++j)
      if (s1 - j - 1 >= s0)
        ans[v[1][i][j].second] = make_pair(w, v[1][i][j + s0].first);
      else
        ans[v[1][i][j].second] = make_pair(v[0][i][s1 - j - 1].first, h);
  }
  for (signed i = 1, i_end_ = n; i <= i_end_; ++i)
    fwrit(ans[i].first), putchar(' '), fwrit(ans[i].second), putchar('\n');
  return 0;
}
