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
	}

}

/tmp/hf-datasets-cache/medium/datasets/42704881117311-config-parquet-and-info-qiankunmu-Project_CodeNet-896c9d36/hub/datasets--qiankunmu--Project_CodeNet_Python800_and_Java250/snapshots/c899fde44a77ba1cc14973ed3de064e4ff3aadc7/Project_CodeNet_Java250.tar.gz