import java.util.*;
public class Main {
	public static void main(String[] args) {
		boolean result = true;
		//出発地点の初期化
		int t0 = 0, x0 = 0, y0 = 0;
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		for (int i=0;i<n;i++) {
			//目的地の更新
			int t1 = sc.nextInt();
			int x1 = sc.nextInt();
			int y1 = sc.nextInt();
			
			int t = t1-t0;
			int d = distance(x0,x1,y0,y1);
			//時間内に届くかを判定
			if (t < d) {
				result = false;
				break;
			}
			//偶奇が一致するか判定
			if (((t^d)&1)==1) {
				result = false;
				break;
			}
			//出発地点の更新
			t0 = t1;
			x0 = x1;
			y0 = y1;
		}
		System.out.println(result ? "Yes" : "No");
	}
	
	//2地点のマンハッタン距離を返す
	public static int distance(int x1, int x2, int y1, int y2) {
		x1 -= x2;
		y1 -= y2;
		if (x1<0)
			x1 *= -1;
		if (y1<0)
			y1 *= -1;
		return x1+y1;
	}
} import java.util.*; util.* java public class Main {
	public static void main(String[] args) {
		boolean result = true;
		//出発地点の初期化
		int t0 = 0, x0 = 0, y0 = 0;
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		for (int i=0;i<n;i++) {
			//目的地の更新
			int t1 = sc.nextInt();
			int x1 = sc.nextInt();
			int y1 = sc.nextInt();
			
			int t = t1-t0;
			int d = distance(x0,x1,y0,y1);
			//時間内に届くかを判定
			if (t < d) {
				result = false;
				break;
			}
			//偶奇が一致するか判定
			if (((t^d)&1)==1) {
				result = false;
				break;
			}
			//出発地点の更新
			t0 = t1;
			x0 = x1;
			y0 = y1;
		}
		System.out.println(result ? "Yes" : "No");
	}
	
	//2地点のマンハッタン距離を返す
	public static int distance(int x1, int x2, int y1, int y2) {
		x1 -= x2;
		y1 -= y2;
		if (x1<0)
			x1 *= -1;
		if (y1<0)
			y1 *= -1;
		return x1+y1;
	}
} Main public static void main(String[] args) {
		boolean result = true;
		//出発地点の初期化
		int t0 = 0, x0 = 0, y0 = 0;
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		for (int i=0;i<n;i++) {
			//目的地の更新
			int t1 = sc.nextInt();
			int x1 = sc.nextInt();
			int y1 = sc.nextInt();
			
			int t = t1-t0;
			int d = distance(x0,x1,y0,y1);
			//時間内に届くかを判定
			if (t < d) {
				result = false;
				break;
			}
			//偶奇が一致するか判定
			if (((t^d)&1)==1) {
				result = false;
				break;
			}
			//出発地点の更新
			t0 = t1;
			x0 = x1;
			y0 = y1;
		}
		System.out.println(result ? "Yes" : "No");
	} main {
		boolean result = true;
		//出発地点の初期化
		int t0 = 0, x0 = 0, y0 = 0;
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		for (int i=0;i<n;i++) {
			//目的地の更新
			int t1 = sc.nextInt();
			int x1 = sc.nextInt();
			int y1 = sc.nextInt();
			
			int t = t1-t0;
			int d = distance(x0,x1,y0,y1);
			//時間内に届くかを判定
			if (t < d) {
				result = false;
				break;
			}
			//偶奇が一致するか判定
			if (((t^d)&1)==1) {
				result = false;
				break;
			}
			//出発地点の更新
			t0 = t1;
			x0 = x1;
			y0 = y1;
		}
		System.out.println(result ? "Yes" : "No");
	} boolean result = true; result true int t0 = 0 t0 0 x0 = 0 x0 0 y0 = 0; y0 0 Scanner sc = new Scanner(System.in); sc new Scanner(System.in) int n = sc.nextInt(); n sc.nextInt() sc.nextInt sc for (int i=0;i<n;i++) {
			//目的地の更新
			int t1 = sc.nextInt();
			int x1 = sc.nextInt();
			int y1 = sc.nextInt();
			
			int t = t1-t0;
			int d = distance(x0,x1,y0,y1);
			//時間内に届くかを判定
			if (t < d) {
				result = false;
				break;
			}
			//偶奇が一致するか判定
			if (((t^d)&1)==1) {
				result = false;
				break;
			}
			//出発地点の更新
			t0 = t1;
			x0 = x1;
			y0 = y1;
		} int i=0; int i=0; i 0 i<n i n i++ i++ i {
			//目的地の更新
			int t1 = sc.nextInt();
			int x1 = sc.nextInt();
			int y1 = sc.nextInt();
			
			int t = t1-t0;
			int d = distance(x0,x1,y0,y1);
			//時間内に届くかを判定
			if (t < d) {
				result = false;
				break;
			}
			//偶奇が一致するか判定
			if (((t^d)&1)==1) {
				result = false;
				break;
			}
			//出発地点の更新
			t0 = t1;
			x0 = x1;
			y0 = y1;
		} {
			//目的地の更新
			int t1 = sc.nextInt();
			int x1 = sc.nextInt();
			int y1 = sc.nextInt();
			
			int t = t1-t0;
			int d = distance(x0,x1,y0,y1);
			//時間内に届くかを判定
			if (t < d) {
				result = false;
				break;
			}
			//偶奇が一致するか判定
			if (((t^d)&1)==1) {
				result = false;
				break;
			}
			//出発地点の更新
			t0 = t1;
			x0 = x1;
			y0 = y1;
		} int t1 = sc.nextInt(); t1 sc.nextInt() sc.nextInt sc int x1 = sc.nextInt(); x1 sc.nextInt() sc.nextInt sc int y1 = sc.nextInt(); y1 sc.nextInt() sc.nextInt sc int t = t1-t0; t t1-t0 t1 t0 int d = distance(x0,x1,y0,y1); d distance(x0,x1,y0,y1) distance x0 x1 y0 y1 if (t < d) {
				result = false;
				break;
			} t < d t d {
				result = false;
				break;
			} result = false result false break; if (((t^d)&1)==1) {
				result = false;
				break;
			} ((t^d)&1)==1 ((t^d)&1) (t^d) t d 1 1 {
				result = false;
				break;
			} result = false result false break; t0 = t1 t0 t1 x0 = x1 x0 x1 y0 = y1 y0 y1 System.out.println(result ? "Yes" : "No") System.out.println System.out System System.out result ? "Yes" : "No" result "Yes" "No" String[] args args //2地点のマンハッタン距離を返す
	public static int distance(int x1, int x2, int y1, int y2) {
		x1 -= x2;
		y1 -= y2;
		if (x1<0)
			x1 *= -1;
		if (y1<0)
			y1 *= -1;
		return x1+y1;
	} distance {
		x1 -= x2;
		y1 -= y2;
		if (x1<0)
			x1 *= -1;
		if (y1<0)
			y1 *= -1;
		return x1+y1;
	} x1 -= x2 x1 x2 y1 -= y2 y1 y2 if (x1<0)
			x1 *= -1; x1<0 x1 0 x1 *= -1 x1 -1 1 if (y1<0)
			y1 *= -1; y1<0 y1 0 y1 *= -1 y1 -1 1 return x1+y1; x1+y1 x1 y1 int x1 x1 int x2 x2 int y1 y1 int y2 y2 public class Main {
	public static void main(String[] args) {
		boolean result = true;
		//出発地点の初期化
		int t0 = 0, x0 = 0, y0 = 0;
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		for (int i=0;i<n;i++) {
			//目的地の更新
			int t1 = sc.nextInt();
			int x1 = sc.nextInt();
			int y1 = sc.nextInt();
			
			int t = t1-t0;
			int d = distance(x0,x1,y0,y1);
			//時間内に届くかを判定
			if (t < d) {
				result = false;
				break;
			}
			//偶奇が一致するか判定
			if (((t^d)&1)==1) {
				result = false;
				break;
			}
			//出発地点の更新
			t0 = t1;
			x0 = x1;
			y0 = y1;
		}
		System.out.println(result ? "Yes" : "No");
	}
	
	//2地点のマンハッタン距離を返す
	public static int distance(int x1, int x2, int y1, int y2) {
		x1 -= x2;
		y1 -= y2;
		if (x1<0)
			x1 *= -1;
		if (y1<0)
			y1 *= -1;
		return x1+y1;
	}
} public class Main {
	public static void main(String[] args) {
		boolean result = true;
		//出発地点の初期化
		int t0 = 0, x0 = 0, y0 = 0;
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		for (int i=0;i<n;i++) {
			//目的地の更新
			int t1 = sc.nextInt();
			int x1 = sc.nextInt();
			int y1 = sc.nextInt();
			
			int t = t1-t0;
			int d = distance(x0,x1,y0,y1);
			//時間内に届くかを判定
			if (t < d) {
				result = false;
				break;
			}
			//偶奇が一致するか判定
			if (((t^d)&1)==1) {
				result = false;
				break;
			}
			//出発地点の更新
			t0 = t1;
			x0 = x1;
			y0 = y1;
		}
		System.out.println(result ? "Yes" : "No");
	}
	
	//2地点のマンハッタン距離を返す
	public static int distance(int x1, int x2, int y1, int y2) {
		x1 -= x2;
		y1 -= y2;
		if (x1<0)
			x1 *= -1;
		if (y1<0)
			y1 *= -1;
		return x1+y1;
	}
} Main
import java.util.*;
public class Main {
	public static void main(String[] args) {
		boolean result = true;
		//出発地点の初期化
		int t0 = 0, x0 = 0, y0 = 0;
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		for (int i=0;i<n;i++) {
			//目的地の更新
			int t1 = sc.nextInt();
			int x1 = sc.nextInt();
			int y1 = sc.nextInt();
			
			int t = t1-t0;
			int d = distance(x0,x1,y0,y1);
			//時間内に届くかを判定
			if (t < d) {
				result = false;
				break;
			}
			//偶奇が一致するか判定
			if (((t^d)&1)==1) {
				result = false;
				break;
			}
			//出発地点の更新
			t0 = t1;
			x0 = x1;
			y0 = y1;
		}
		System.out.println(result ? "Yes" : "No");
	}
	
	//2地点のマンハッタン距離を返す
	public static int distance(int x1, int x2, int y1, int y2) {
		x1 -= x2;
		y1 -= y2;
		if (x1<0)
			x1 *= -1;
		if (y1<0)
			y1 *= -1;
		return x1+y1;
	}
}
