// Original C++ solution (slower):
#include <iostream>

#include <cstdio>

#include <string>

#include <cstdlib>

#include <vector>

#include <algorithm>

#include <functional>

#include <iomanip>

#include <stdlib.h>

#include <string.h>

#include <cmath>

#include <map>

#include <queue>

#include <deque>

#include <stack>

#include <set>

const long long MOD = 1e9 + 7;

using namespace std;

typedef long long ll;



map<ll, int> mp;

int main()

{

	cin.tie(0);

	ios::sync_with_stdio(false);

	int n;

	cin >> n;

	vector<int> t(110000), x(110000), y(110000);

	t[0] = x[0] = y[0] = 0;

	for (int i = 0; i < n; i++) cin >> t[i + 1] >> x[i + 1] >> y[i + 1];

	bool can = true;

	for (int i = 0; i < n; i++) {

		int dt = t[i + 1] - t[i];

		int dist = abs(x[i + 1] - x[i]) + abs(y[i + 1] - y[i]);

		if (dt < dist) can = false;

		if (dist % 2 != dt % 2) can = false;

	}

	if (can) cout << "Yes" << endl;

	else cout << "No" << endl;

	return 0;

}

// Optimized solution to the same problem (faster):
#include <iostream>

#include <cstdio>

#include <string>

#include <vector>

#include <algorithm>

#include <functional>

#include <iomanip>

#include <stdlib.h>

#include <string.h>

#include <cstring>

#include <cmath>

#include <map>

#include <queue>

#include <deque>

#include <stack>

#include <set>

#include <stdio.h>

#include <tuple>

#include <bitset>

#include <cfloat>

#include <fstream>

#include <limits.h>

#include <list>

#include <math.h>

#include <random>

#include <unordered_map>

#include <unordered_set>

#include <bitset>

#include <numeric>

#include <utility>

#include <sstream>



template<class T> inline bool chmin(T& a, T b) {

	if (a > b) {

		a = b;

		return true;

	}

	return false;

}

template<class T> inline bool chmax(T& a, T b) {

	if (a < b) {

		a = b;

		return true;

	}

	return false;

}



using namespace std;

#define int long long

#define ll long long

#define rep(i, n) for (ll i = 0; i < (n); i++)

#define FOR(i,a,b) for(ll i=(a);i<(b);i++)

#define FORR(i,a,b)for(ll i=(a);i<=(b);i++)

#define repr(i,n) for(ll i=n;i>=0;i--)

#define P pair<ll, ll>

#define sz(x) (ll)x.size()

#define ALL(x) (x).begin(),(x).end()

#define ALLR(x) (x).rbegin(),(x).rend()

#define VE vector<ll>

#define COUT(x) cout<<(x)<<endl

#define MA map<ll,ll>

#define SE set<ll>

#define PQ priority_queue<ll>

#define PQR priority_queue<ll,VE,greater<ll>>

#define COUT(x) cout<<(x)<<endl

#define YES(n) cout << ((n) ? "YES" : "NO"  ) << endl

#define Yes(n) cout << ((n) ? "Yes" : "No"  ) << endl

#define EPS (1e-10)

ll gcd(ll a, ll b) {

	if (a < b)swap(a, b);

	if (b == 0) return a;

	return gcd(b, a % b);

}

ll lcm(ll a, ll b) {

	ll g = gcd(a, b);

	return a / g * b;

}

bool prime(ll n) {

	for (ll i = 2; i <= sqrt(n); i++) {

		if (n%i == 0)return false;

	}

	return n != 1;

}





const long long MOD = 1000000007;

const long long INF = 1LL << 60;





const int MAX_N = 100010;



signed main() {

	ios_base::sync_with_stdio(0);

	cin.tie(0);

	int n; cin >> n;

	VE t(n), x(n), y(n); rep(i, n)cin >> t[i] >> x[i] >> y[i];

	rep(i, n) {

		if (t[i] >= x[i] + y[i] && t[i] % 2 == (x[i] + y[i]) % 2) {

		

		}

		else {

			cout << "No" << endl; return 0;

		}

	}

	cout << "Yes" << endl;

	return 0;

}


// Fastest known solution for this problem: