#include <bits/stdc++.h>
using namespace std;
using lint = long long;
template <class T>
bool chmax(T &a, const T &b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T>
bool chmin(T &a, const T &b) {
  if (b < a) {
    a = b;
    return 1;
  }
  return 0;
}
struct Point {
  Point() = default;
  Point(const Point &p) : x(p.x), y(p.y) {}
  Point(int _x, int _y) : x(_x), y(_y) {}
  Point move(int _dx, int _dy) {
    x += _dx;
    y += _dy;
    return *this;
  }
  Point right() {
    x += 1;
    return *this;
  }
  Point left() {
    x -= 1;
    return *this;
  }
  Point up() {
    y += 1;
    return *this;
  }
  Point down() {
    y -= 1;
    return *this;
  }
  Point operator-(const Point &other) const {
    return {x - other.x, y - other.y};
  }
  int x, y;
};
int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  Point pos(0, 0);
  int N;
  vector<int> t;
  vector<Point> targets;
  cin >> N;
  t.resize(N);
  targets.resize(N);
  for (int i = 0, i_len = (N); i < i_len; ++i) {
    cin >> t[i] >> targets[i].x >> targets[i].y;
  }
  bool can = false;
  for (int i = 0; i < N; ++i) {
    int cnt = 0;
    Point dp = targets[i] - pos;
    cnt = abs(dp.x) + abs(dp.y);
    if (cnt <= t[i]) {
      if (cnt % 2 == t[i] % 2) {
        can = true;
        pos = targets[i];
        for (int k = i; k < N - 1; ++k) {
          t[k + 1] -= t[i];
        }
      } else {
        can = false;
        break;
      }
    } else {
      can = false;
      break;
    }
  }
  cout << (can ? "Yes" : "No") << "\n";
  return 0;
}
