import java.util.Scanner;

// 提出時にclass Main に書き換え
public class Main {
	public static void main(String[] args)  {
		// 標準入力を受け取る
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt(); // int Nを受け取る
		int[] t = new int[N+1];
		int[] x = new int[N+1];
		int[] y = new int[N+1];
		// 各配列の0番目の要素に0を格納
		t[0] = 0;
		x[0] = 0;
		y[0] = 0;
		for(int i = 1; i <= N; i++) {
			t[i] = sc.nextInt(); // int t[i]を受け取る
			x[i] = sc.nextInt(); // int x[i]を受け取る
			y[i] = sc.nextInt(); // int y[i]を受け取る
		}
		sc.close(); // 標準入力を終了

		boolean can = true; // 可能フラグ

		for(int i = 0; i < N; i++) {
			int dt = t[i+1] - t[i]; // t[i+1]とt[i]の間の時間差
			int dist = Math.abs(x[i+1] - x[i]) + Math.abs(y[i+1] - y[i]);

			// dt < dist なら　canフラグをfalseにする
			if(dt < dist) can = false;

			// dt%2 != dist%2 なら　canフラグをfalseにする
			if(dt%2 != dist%2) can = false;
		}

		if (can) {
			// 可能
			System.out.println("Yes");
		} else {
			System.out.println("No");
		}
	}

} import java.util.Scanner; Scanner java.util public class Main {
	public static void main(String[] args)  {
		// 標準入力を受け取る
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt(); // int Nを受け取る
		int[] t = new int[N+1];
		int[] x = new int[N+1];
		int[] y = new int[N+1];
		// 各配列の0番目の要素に0を格納
		t[0] = 0;
		x[0] = 0;
		y[0] = 0;
		for(int i = 1; i <= N; i++) {
			t[i] = sc.nextInt(); // int t[i]を受け取る
			x[i] = sc.nextInt(); // int x[i]を受け取る
			y[i] = sc.nextInt(); // int y[i]を受け取る
		}
		sc.close(); // 標準入力を終了

		boolean can = true; // 可能フラグ

		for(int i = 0; i < N; i++) {
			int dt = t[i+1] - t[i]; // t[i+1]とt[i]の間の時間差
			int dist = Math.abs(x[i+1] - x[i]) + Math.abs(y[i+1] - y[i]);

			// dt < dist なら　canフラグをfalseにする
			if(dt < dist) can = false;

			// dt%2 != dist%2 なら　canフラグをfalseにする
			if(dt%2 != dist%2) can = false;
		}

		if (can) {
			// 可能
			System.out.println("Yes");
		} else {
			System.out.println("No");
		}
	}

} Main public static void main(String[] args)  {
		// 標準入力を受け取る
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt(); // int Nを受け取る
		int[] t = new int[N+1];
		int[] x = new int[N+1];
		int[] y = new int[N+1];
		// 各配列の0番目の要素に0を格納
		t[0] = 0;
		x[0] = 0;
		y[0] = 0;
		for(int i = 1; i <= N; i++) {
			t[i] = sc.nextInt(); // int t[i]を受け取る
			x[i] = sc.nextInt(); // int x[i]を受け取る
			y[i] = sc.nextInt(); // int y[i]を受け取る
		}
		sc.close(); // 標準入力を終了

		boolean can = true; // 可能フラグ

		for(int i = 0; i < N; i++) {
			int dt = t[i+1] - t[i]; // t[i+1]とt[i]の間の時間差
			int dist = Math.abs(x[i+1] - x[i]) + Math.abs(y[i+1] - y[i]);

			// dt < dist なら　canフラグをfalseにする
			if(dt < dist) can = false;

			// dt%2 != dist%2 なら　canフラグをfalseにする
			if(dt%2 != dist%2) can = false;
		}

		if (can) {
			// 可能
			System.out.println("Yes");
		} else {
			System.out.println("No");
		}
	} main {
		// 標準入力を受け取る
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt(); // int Nを受け取る
		int[] t = new int[N+1];
		int[] x = new int[N+1];
		int[] y = new int[N+1];
		// 各配列の0番目の要素に0を格納
		t[0] = 0;
		x[0] = 0;
		y[0] = 0;
		for(int i = 1; i <= N; i++) {
			t[i] = sc.nextInt(); // int t[i]を受け取る
			x[i] = sc.nextInt(); // int x[i]を受け取る
			y[i] = sc.nextInt(); // int y[i]を受け取る
		}
		sc.close(); // 標準入力を終了

		boolean can = true; // 可能フラグ

		for(int i = 0; i < N; i++) {
			int dt = t[i+1] - t[i]; // t[i+1]とt[i]の間の時間差
			int dist = Math.abs(x[i+1] - x[i]) + Math.abs(y[i+1] - y[i]);

			// dt < dist なら　canフラグをfalseにする
			if(dt < dist) can = false;

			// dt%2 != dist%2 なら　canフラグをfalseにする
			if(dt%2 != dist%2) can = false;
		}

		if (can) {
			// 可能
			System.out.println("Yes");
		} else {
			System.out.println("No");
		}
	} Scanner sc = new Scanner(System.in); sc new Scanner(System.in) int N = sc.nextInt(); N sc.nextInt() sc.nextInt sc int[] t = new int[N+1]; t new int[N+1] N+1 N 1 int[] x = new int[N+1]; x new int[N+1] N+1 N 1 int[] y = new int[N+1]; y new int[N+1] N+1 N 1 t[0] = 0 t[0] t 0 0 x[0] = 0 x[0] x 0 0 y[0] = 0 y[0] y 0 0 for(int i = 1; i <= N; i++) {
			t[i] = sc.nextInt(); // int t[i]を受け取る
			x[i] = sc.nextInt(); // int x[i]を受け取る
			y[i] = sc.nextInt(); // int y[i]を受け取る
		} int i = 1; int i = 1; i 1 i <= N i N i++ i++ i {
			t[i] = sc.nextInt(); // int t[i]を受け取る
			x[i] = sc.nextInt(); // int x[i]を受け取る
			y[i] = sc.nextInt(); // int y[i]を受け取る
		} {
			t[i] = sc.nextInt(); // int t[i]を受け取る
			x[i] = sc.nextInt(); // int x[i]を受け取る
			y[i] = sc.nextInt(); // int y[i]を受け取る
		} t[i] = sc.nextInt() t[i] t i sc.nextInt() sc.nextInt sc x[i] = sc.nextInt() x[i] x i sc.nextInt() sc.nextInt sc y[i] = sc.nextInt() y[i] y i sc.nextInt() sc.nextInt sc sc.close() sc.close sc boolean can = true; can true for(int i = 0; i < N; i++) {
			int dt = t[i+1] - t[i]; // t[i+1]とt[i]の間の時間差
			int dist = Math.abs(x[i+1] - x[i]) + Math.abs(y[i+1] - y[i]);

			// dt < dist なら　canフラグをfalseにする
			if(dt < dist) can = false;

			// dt%2 != dist%2 なら　canフラグをfalseにする
			if(dt%2 != dist%2) can = false;
		} int i = 0; int i = 0; i 0 i < N i N i++ i++ i {
			int dt = t[i+1] - t[i]; // t[i+1]とt[i]の間の時間差
			int dist = Math.abs(x[i+1] - x[i]) + Math.abs(y[i+1] - y[i]);

			// dt < dist なら　canフラグをfalseにする
			if(dt < dist) can = false;

			// dt%2 != dist%2 なら　canフラグをfalseにする
			if(dt%2 != dist%2) can = false;
		} {
			int dt = t[i+1] - t[i]; // t[i+1]とt[i]の間の時間差
			int dist = Math.abs(x[i+1] - x[i]) + Math.abs(y[i+1] - y[i]);

			// dt < dist なら　canフラグをfalseにする
			if(dt < dist) can = false;

			// dt%2 != dist%2 なら　canフラグをfalseにする
			if(dt%2 != dist%2) can = false;
		} int dt = t[i+1] - t[i]; dt t[i+1] - t[i] t[i+1] t i+1 i 1 t[i] t i int dist = Math.abs(x[i+1] - x[i]) + Math.abs(y[i+1] - y[i]); dist Math.abs(x[i+1] - x[i]) + Math.abs(y[i+1] - y[i]) Math.abs(x[i+1] - x[i]) Math.abs Math x[i+1] - x[i] x[i+1] x i+1 i 1 x[i] x i Math.abs(y[i+1] - y[i]) Math.abs Math y[i+1] - y[i] y[i+1] y i+1 i 1 y[i] y i if(dt < dist) can = false; dt < dist dt dist can = false can false if(dt%2 != dist%2) can = false; dt%2 != dist%2 dt%2 dt 2 dist%2 dist 2 can = false can false if (can) {
			// 可能
			System.out.println("Yes");
		} else {
			System.out.println("No");
		} can {
			// 可能
			System.out.println("Yes");
		} System.out.println("Yes") System.out.println System.out System System.out "Yes" {
			System.out.println("No");
		} System.out.println("No") System.out.println System.out System System.out "No" String[] args args public class Main {
	public static void main(String[] args)  {
		// 標準入力を受け取る
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt(); // int Nを受け取る
		int[] t = new int[N+1];
		int[] x = new int[N+1];
		int[] y = new int[N+1];
		// 各配列の0番目の要素に0を格納
		t[0] = 0;
		x[0] = 0;
		y[0] = 0;
		for(int i = 1; i <= N; i++) {
			t[i] = sc.nextInt(); // int t[i]を受け取る
			x[i] = sc.nextInt(); // int x[i]を受け取る
			y[i] = sc.nextInt(); // int y[i]を受け取る
		}
		sc.close(); // 標準入力を終了

		boolean can = true; // 可能フラグ

		for(int i = 0; i < N; i++) {
			int dt = t[i+1] - t[i]; // t[i+1]とt[i]の間の時間差
			int dist = Math.abs(x[i+1] - x[i]) + Math.abs(y[i+1] - y[i]);

			// dt < dist なら　canフラグをfalseにする
			if(dt < dist) can = false;

			// dt%2 != dist%2 なら　canフラグをfalseにする
			if(dt%2 != dist%2) can = false;
		}

		if (can) {
			// 可能
			System.out.println("Yes");
		} else {
			System.out.println("No");
		}
	}

} public class Main {
	public static void main(String[] args)  {
		// 標準入力を受け取る
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt(); // int Nを受け取る
		int[] t = new int[N+1];
		int[] x = new int[N+1];
		int[] y = new int[N+1];
		// 各配列の0番目の要素に0を格納
		t[0] = 0;
		x[0] = 0;
		y[0] = 0;
		for(int i = 1; i <= N; i++) {
			t[i] = sc.nextInt(); // int t[i]を受け取る
			x[i] = sc.nextInt(); // int x[i]を受け取る
			y[i] = sc.nextInt(); // int y[i]を受け取る
		}
		sc.close(); // 標準入力を終了

		boolean can = true; // 可能フラグ

		for(int i = 0; i < N; i++) {
			int dt = t[i+1] - t[i]; // t[i+1]とt[i]の間の時間差
			int dist = Math.abs(x[i+1] - x[i]) + Math.abs(y[i+1] - y[i]);

			// dt < dist なら　canフラグをfalseにする
			if(dt < dist) can = false;

			// dt%2 != dist%2 なら　canフラグをfalseにする
			if(dt%2 != dist%2) can = false;
		}

		if (can) {
			// 可能
			System.out.println("Yes");
		} else {
			System.out.println("No");
		}
	}

} Main
import java.util.Scanner;

// 提出時にclass Main に書き換え
public class Main {
	public static void main(String[] args)  {
		// 標準入力を受け取る
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt(); // int Nを受け取る
		int[] t = new int[N+1];
		int[] x = new int[N+1];
		int[] y = new int[N+1];
		// 各配列の0番目の要素に0を格納
		t[0] = 0;
		x[0] = 0;
		y[0] = 0;
		for(int i = 1; i <= N; i++) {
			t[i] = sc.nextInt(); // int t[i]を受け取る
			x[i] = sc.nextInt(); // int x[i]を受け取る
			y[i] = sc.nextInt(); // int y[i]を受け取る
		}
		sc.close(); // 標準入力を終了

		boolean can = true; // 可能フラグ

		for(int i = 0; i < N; i++) {
			int dt = t[i+1] - t[i]; // t[i+1]とt[i]の間の時間差
			int dist = Math.abs(x[i+1] - x[i]) + Math.abs(y[i+1] - y[i]);

			// dt < dist なら　canフラグをfalseにする
			if(dt < dist) can = false;

			// dt%2 != dist%2 なら　canフラグをfalseにする
			if(dt%2 != dist%2) can = false;
		}

		if (can) {
			// 可能
			System.out.println("Yes");
		} else {
			System.out.println("No");
		}
	}

}