import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int[][] checkPoints = new int[n][3];
		int startPoint[] = {0, 0, 0};

		for (int i = 0; i < n; i++) {
			int t = sc.nextInt();
			int x = sc.nextInt();
			int y = sc.nextInt();
			checkPoints[i][0] = t;
			checkPoints[i][1] = x;
			checkPoints[i][2] = y;
			if (isAbleToGo(startPoint, checkPoints[i])) {
				startPoint = checkPoints[i];
			} else {
				System.out.println("No");
				break;
			}
			if (i == n - 1) {
				System.out.println("Yes");
			}
		}
	}
	public static boolean isAbleToGo(int fromPoint[], int toPoint[]) {
		int timeRemained = toPoint[0] - fromPoint[0];
		int differOfX = Math.abs(toPoint[1] - fromPoint[1]);
		int differOfY = Math.abs(toPoint[2] - fromPoint[2]);
		int differ = differOfX + differOfY;
		int amariTime = timeRemained - differ;

		return amariTime >= 0 && amariTime % 2 == 0;//2の倍数ターン分余ったら行ったり来たりすればOK
	}

} 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[][] checkPoints = new int[n][3];
		int startPoint[] = {0, 0, 0};

		for (int i = 0; i < n; i++) {
			int t = sc.nextInt();
			int x = sc.nextInt();
			int y = sc.nextInt();
			checkPoints[i][0] = t;
			checkPoints[i][1] = x;
			checkPoints[i][2] = y;
			if (isAbleToGo(startPoint, checkPoints[i])) {
				startPoint = checkPoints[i];
			} else {
				System.out.println("No");
				break;
			}
			if (i == n - 1) {
				System.out.println("Yes");
			}
		}
	}
	public static boolean isAbleToGo(int fromPoint[], int toPoint[]) {
		int timeRemained = toPoint[0] - fromPoint[0];
		int differOfX = Math.abs(toPoint[1] - fromPoint[1]);
		int differOfY = Math.abs(toPoint[2] - fromPoint[2]);
		int differ = differOfX + differOfY;
		int amariTime = timeRemained - differ;

		return amariTime >= 0 && amariTime % 2 == 0;//2の倍数ターン分余ったら行ったり来たりすればOK
	}

} Main public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int[][] checkPoints = new int[n][3];
		int startPoint[] = {0, 0, 0};

		for (int i = 0; i < n; i++) {
			int t = sc.nextInt();
			int x = sc.nextInt();
			int y = sc.nextInt();
			checkPoints[i][0] = t;
			checkPoints[i][1] = x;
			checkPoints[i][2] = y;
			if (isAbleToGo(startPoint, checkPoints[i])) {
				startPoint = checkPoints[i];
			} else {
				System.out.println("No");
				break;
			}
			if (i == n - 1) {
				System.out.println("Yes");
			}
		}
	} main {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int[][] checkPoints = new int[n][3];
		int startPoint[] = {0, 0, 0};

		for (int i = 0; i < n; i++) {
			int t = sc.nextInt();
			int x = sc.nextInt();
			int y = sc.nextInt();
			checkPoints[i][0] = t;
			checkPoints[i][1] = x;
			checkPoints[i][2] = y;
			if (isAbleToGo(startPoint, checkPoints[i])) {
				startPoint = checkPoints[i];
			} else {
				System.out.println("No");
				break;
			}
			if (i == n - 1) {
				System.out.println("Yes");
			}
		}
	} Scanner sc = new Scanner(System.in); sc new Scanner(System.in) int n = sc.nextInt(); n sc.nextInt() sc.nextInt sc int[][] checkPoints = new int[n][3]; checkPoints new int[n][3] n 3 int startPoint[] = {0, 0, 0}; startPoint {0, 0, 0} 0 0 0 for (int i = 0; i < n; i++) {
			int t = sc.nextInt();
			int x = sc.nextInt();
			int y = sc.nextInt();
			checkPoints[i][0] = t;
			checkPoints[i][1] = x;
			checkPoints[i][2] = y;
			if (isAbleToGo(startPoint, checkPoints[i])) {
				startPoint = checkPoints[i];
			} else {
				System.out.println("No");
				break;
			}
			if (i == n - 1) {
				System.out.println("Yes");
			}
		} int i = 0; int i = 0; i 0 i < n i n i++ i++ i {
			int t = sc.nextInt();
			int x = sc.nextInt();
			int y = sc.nextInt();
			checkPoints[i][0] = t;
			checkPoints[i][1] = x;
			checkPoints[i][2] = y;
			if (isAbleToGo(startPoint, checkPoints[i])) {
				startPoint = checkPoints[i];
			} else {
				System.out.println("No");
				break;
			}
			if (i == n - 1) {
				System.out.println("Yes");
			}
		} {
			int t = sc.nextInt();
			int x = sc.nextInt();
			int y = sc.nextInt();
			checkPoints[i][0] = t;
			checkPoints[i][1] = x;
			checkPoints[i][2] = y;
			if (isAbleToGo(startPoint, checkPoints[i])) {
				startPoint = checkPoints[i];
			} else {
				System.out.println("No");
				break;
			}
			if (i == n - 1) {
				System.out.println("Yes");
			}
		} int t = sc.nextInt(); t sc.nextInt() sc.nextInt sc int x = sc.nextInt(); x sc.nextInt() sc.nextInt sc int y = sc.nextInt(); y sc.nextInt() sc.nextInt sc checkPoints[i][0] = t checkPoints[i][0] checkPoints[i] checkPoints i 0 t checkPoints[i][1] = x checkPoints[i][1] checkPoints[i] checkPoints i 1 x checkPoints[i][2] = y checkPoints[i][2] checkPoints[i] checkPoints i 2 y if (isAbleToGo(startPoint, checkPoints[i])) {
				startPoint = checkPoints[i];
			} else {
				System.out.println("No");
				break;
			} isAbleToGo(startPoint, checkPoints[i]) isAbleToGo startPoint checkPoints[i] checkPoints i {
				startPoint = checkPoints[i];
			} startPoint = checkPoints[i] startPoint checkPoints[i] checkPoints i {
				System.out.println("No");
				break;
			} System.out.println("No") System.out.println System.out System System.out "No" break; if (i == n - 1) {
				System.out.println("Yes");
			} i == n - 1 i n - 1 n 1 {
				System.out.println("Yes");
			} System.out.println("Yes") System.out.println System.out System System.out "Yes" String[] args args public static boolean isAbleToGo(int fromPoint[], int toPoint[]) {
		int timeRemained = toPoint[0] - fromPoint[0];
		int differOfX = Math.abs(toPoint[1] - fromPoint[1]);
		int differOfY = Math.abs(toPoint[2] - fromPoint[2]);
		int differ = differOfX + differOfY;
		int amariTime = timeRemained - differ;

		return amariTime >= 0 && amariTime % 2 == 0;//2の倍数ターン分余ったら行ったり来たりすればOK
	} isAbleToGo {
		int timeRemained = toPoint[0] - fromPoint[0];
		int differOfX = Math.abs(toPoint[1] - fromPoint[1]);
		int differOfY = Math.abs(toPoint[2] - fromPoint[2]);
		int differ = differOfX + differOfY;
		int amariTime = timeRemained - differ;

		return amariTime >= 0 && amariTime % 2 == 0;//2の倍数ターン分余ったら行ったり来たりすればOK
	} int timeRemained = toPoint[0] - fromPoint[0]; timeRemained toPoint[0] - fromPoint[0] toPoint[0] toPoint 0 fromPoint[0] fromPoint 0 int differOfX = Math.abs(toPoint[1] - fromPoint[1]); differOfX Math.abs(toPoint[1] - fromPoint[1]) Math.abs Math toPoint[1] - fromPoint[1] toPoint[1] toPoint 1 fromPoint[1] fromPoint 1 int differOfY = Math.abs(toPoint[2] - fromPoint[2]); differOfY Math.abs(toPoint[2] - fromPoint[2]) Math.abs Math toPoint[2] - fromPoint[2] toPoint[2] toPoint 2 fromPoint[2] fromPoint 2 int differ = differOfX + differOfY; differ differOfX + differOfY differOfX differOfY int amariTime = timeRemained - differ; amariTime timeRemained - differ timeRemained differ return amariTime >= 0 && amariTime % 2 == 0;//2の倍数ターン分余ったら行ったり来たりすればOK amariTime >= 0 && amariTime % 2 == 0 amariTime >= 0 amariTime 0 amariTime % 2 == 0 amariTime % 2 amariTime 2 0 int fromPoint[] fromPoint int toPoint[] toPoint public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int[][] checkPoints = new int[n][3];
		int startPoint[] = {0, 0, 0};

		for (int i = 0; i < n; i++) {
			int t = sc.nextInt();
			int x = sc.nextInt();
			int y = sc.nextInt();
			checkPoints[i][0] = t;
			checkPoints[i][1] = x;
			checkPoints[i][2] = y;
			if (isAbleToGo(startPoint, checkPoints[i])) {
				startPoint = checkPoints[i];
			} else {
				System.out.println("No");
				break;
			}
			if (i == n - 1) {
				System.out.println("Yes");
			}
		}
	}
	public static boolean isAbleToGo(int fromPoint[], int toPoint[]) {
		int timeRemained = toPoint[0] - fromPoint[0];
		int differOfX = Math.abs(toPoint[1] - fromPoint[1]);
		int differOfY = Math.abs(toPoint[2] - fromPoint[2]);
		int differ = differOfX + differOfY;
		int amariTime = timeRemained - differ;

		return amariTime >= 0 && amariTime % 2 == 0;//2の倍数ターン分余ったら行ったり来たりすればOK
	}

} public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int[][] checkPoints = new int[n][3];
		int startPoint[] = {0, 0, 0};

		for (int i = 0; i < n; i++) {
			int t = sc.nextInt();
			int x = sc.nextInt();
			int y = sc.nextInt();
			checkPoints[i][0] = t;
			checkPoints[i][1] = x;
			checkPoints[i][2] = y;
			if (isAbleToGo(startPoint, checkPoints[i])) {
				startPoint = checkPoints[i];
			} else {
				System.out.println("No");
				break;
			}
			if (i == n - 1) {
				System.out.println("Yes");
			}
		}
	}
	public static boolean isAbleToGo(int fromPoint[], int toPoint[]) {
		int timeRemained = toPoint[0] - fromPoint[0];
		int differOfX = Math.abs(toPoint[1] - fromPoint[1]);
		int differOfY = Math.abs(toPoint[2] - fromPoint[2]);
		int differ = differOfX + differOfY;
		int amariTime = timeRemained - differ;

		return amariTime >= 0 && amariTime % 2 == 0;//2の倍数ターン分余ったら行ったり来たりすればOK
	}

} Main
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int[][] checkPoints = new int[n][3];
		int startPoint[] = {0, 0, 0};

		for (int i = 0; i < n; i++) {
			int t = sc.nextInt();
			int x = sc.nextInt();
			int y = sc.nextInt();
			checkPoints[i][0] = t;
			checkPoints[i][1] = x;
			checkPoints[i][2] = y;
			if (isAbleToGo(startPoint, checkPoints[i])) {
				startPoint = checkPoints[i];
			} else {
				System.out.println("No");
				break;
			}
			if (i == n - 1) {
				System.out.println("Yes");
			}
		}
	}
	public static boolean isAbleToGo(int fromPoint[], int toPoint[]) {
		int timeRemained = toPoint[0] - fromPoint[0];
		int differOfX = Math.abs(toPoint[1] - fromPoint[1]);
		int differOfY = Math.abs(toPoint[2] - fromPoint[2]);
		int differ = differOfX + differOfY;
		int amariTime = timeRemained - differ;

		return amariTime >= 0 && amariTime % 2 == 0;//2の倍数ターン分余ったら行ったり来たりすればOK
	}

}
