import java.util.Scanner;
public class Main {

	public static void main(String[] args) {
		Scanner stdIn = new Scanner(System.in);
		
		/*<考察>
		 * (1,1)→(1,2)へ進むには奇数回必要(奇数回であれば絶対到達可能）
		 * ※(1,1)→(1,6)は5回以上の奇数回であれば到達可能であることを意味する
		 * 
		 * (1,1)→(1,1)に戻ったり(1,1)→(1,3)に行くには偶数回必要
		*/
		
		int n = stdIn.nextInt();
		
		int[] t = new int[n+1];
		int[] x = new int[n+1];
		int[] y = new int[n+1];
		
		t[0] = 0;
		x[0] = 0;
		y[0] = 0;
		
		for(int i = 1; i < n+1; i++) {
			 t[i] = stdIn.nextInt();
			 x[i] = stdIn.nextInt();
			 y[i] = stdIn.nextInt();
			
			
			int time = t[i] - t[i-1];
			int X = Math.abs(x[i] - x[i-1]);
			int Y = Math.abs(y[i] - y[i-1]);
			
			if(X+Y > time) { //到達不能条件
				System.out.println("No");
				return;
			}else if((X+Y) % 2 == 0) {
				if(time % 2 != 0) {
					System.out.println("No");
					return;
				}
				
				
			}else if((X+Y) % 2 != 0) {
				if(time% 2 == 0) {
					System.out.println("No");
					return;
				}
			}else {
				continue;
			}
		
			
		}
		
		System.out.println("Yes");
		
		
		
	}

} import java.util.Scanner; Scanner java.util public class Main {

	public static void main(String[] args) {
		Scanner stdIn = new Scanner(System.in);
		
		/*<考察>
		 * (1,1)→(1,2)へ進むには奇数回必要(奇数回であれば絶対到達可能）
		 * ※(1,1)→(1,6)は5回以上の奇数回であれば到達可能であることを意味する
		 * 
		 * (1,1)→(1,1)に戻ったり(1,1)→(1,3)に行くには偶数回必要
		*/
		
		int n = stdIn.nextInt();
		
		int[] t = new int[n+1];
		int[] x = new int[n+1];
		int[] y = new int[n+1];
		
		t[0] = 0;
		x[0] = 0;
		y[0] = 0;
		
		for(int i = 1; i < n+1; i++) {
			 t[i] = stdIn.nextInt();
			 x[i] = stdIn.nextInt();
			 y[i] = stdIn.nextInt();
			
			
			int time = t[i] - t[i-1];
			int X = Math.abs(x[i] - x[i-1]);
			int Y = Math.abs(y[i] - y[i-1]);
			
			if(X+Y > time) { //到達不能条件
				System.out.println("No");
				return;
			}else if((X+Y) % 2 == 0) {
				if(time % 2 != 0) {
					System.out.println("No");
					return;
				}
				
				
			}else if((X+Y) % 2 != 0) {
				if(time% 2 == 0) {
					System.out.println("No");
					return;
				}
			}else {
				continue;
			}
		
			
		}
		
		System.out.println("Yes");
		
		
		
	}

} Main public static void main(String[] args) {
		Scanner stdIn = new Scanner(System.in);
		
		/*<考察>
		 * (1,1)→(1,2)へ進むには奇数回必要(奇数回であれば絶対到達可能）
		 * ※(1,1)→(1,6)は5回以上の奇数回であれば到達可能であることを意味する
		 * 
		 * (1,1)→(1,1)に戻ったり(1,1)→(1,3)に行くには偶数回必要
		*/
		
		int n = stdIn.nextInt();
		
		int[] t = new int[n+1];
		int[] x = new int[n+1];
		int[] y = new int[n+1];
		
		t[0] = 0;
		x[0] = 0;
		y[0] = 0;
		
		for(int i = 1; i < n+1; i++) {
			 t[i] = stdIn.nextInt();
			 x[i] = stdIn.nextInt();
			 y[i] = stdIn.nextInt();
			
			
			int time = t[i] - t[i-1];
			int X = Math.abs(x[i] - x[i-1]);
			int Y = Math.abs(y[i] - y[i-1]);
			
			if(X+Y > time) { //到達不能条件
				System.out.println("No");
				return;
			}else if((X+Y) % 2 == 0) {
				if(time % 2 != 0) {
					System.out.println("No");
					return;
				}
				
				
			}else if((X+Y) % 2 != 0) {
				if(time% 2 == 0) {
					System.out.println("No");
					return;
				}
			}else {
				continue;
			}
		
			
		}
		
		System.out.println("Yes");
		
		
		
	} main {
		Scanner stdIn = new Scanner(System.in);
		
		/*<考察>
		 * (1,1)→(1,2)へ進むには奇数回必要(奇数回であれば絶対到達可能）
		 * ※(1,1)→(1,6)は5回以上の奇数回であれば到達可能であることを意味する
		 * 
		 * (1,1)→(1,1)に戻ったり(1,1)→(1,3)に行くには偶数回必要
		*/
		
		int n = stdIn.nextInt();
		
		int[] t = new int[n+1];
		int[] x = new int[n+1];
		int[] y = new int[n+1];
		
		t[0] = 0;
		x[0] = 0;
		y[0] = 0;
		
		for(int i = 1; i < n+1; i++) {
			 t[i] = stdIn.nextInt();
			 x[i] = stdIn.nextInt();
			 y[i] = stdIn.nextInt();
			
			
			int time = t[i] - t[i-1];
			int X = Math.abs(x[i] - x[i-1]);
			int Y = Math.abs(y[i] - y[i-1]);
			
			if(X+Y > time) { //到達不能条件
				System.out.println("No");
				return;
			}else if((X+Y) % 2 == 0) {
				if(time % 2 != 0) {
					System.out.println("No");
					return;
				}
				
				
			}else if((X+Y) % 2 != 0) {
				if(time% 2 == 0) {
					System.out.println("No");
					return;
				}
			}else {
				continue;
			}
		
			
		}
		
		System.out.println("Yes");
		
		
		
	} Scanner stdIn = new Scanner(System.in); stdIn new Scanner(System.in) int n = stdIn.nextInt(); n stdIn.nextInt() stdIn.nextInt stdIn 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+1; i++) {
			 t[i] = stdIn.nextInt();
			 x[i] = stdIn.nextInt();
			 y[i] = stdIn.nextInt();
			
			
			int time = t[i] - t[i-1];
			int X = Math.abs(x[i] - x[i-1]);
			int Y = Math.abs(y[i] - y[i-1]);
			
			if(X+Y > time) { //到達不能条件
				System.out.println("No");
				return;
			}else if((X+Y) % 2 == 0) {
				if(time % 2 != 0) {
					System.out.println("No");
					return;
				}
				
				
			}else if((X+Y) % 2 != 0) {
				if(time% 2 == 0) {
					System.out.println("No");
					return;
				}
			}else {
				continue;
			}
		
			
		} int i = 1; int i = 1; i 1 i < n+1 i n+1 n 1 i++ i++ i {
			 t[i] = stdIn.nextInt();
			 x[i] = stdIn.nextInt();
			 y[i] = stdIn.nextInt();
			
			
			int time = t[i] - t[i-1];
			int X = Math.abs(x[i] - x[i-1]);
			int Y = Math.abs(y[i] - y[i-1]);
			
			if(X+Y > time) { //到達不能条件
				System.out.println("No");
				return;
			}else if((X+Y) % 2 == 0) {
				if(time % 2 != 0) {
					System.out.println("No");
					return;
				}
				
				
			}else if((X+Y) % 2 != 0) {
				if(time% 2 == 0) {
					System.out.println("No");
					return;
				}
			}else {
				continue;
			}
		
			
		} {
			 t[i] = stdIn.nextInt();
			 x[i] = stdIn.nextInt();
			 y[i] = stdIn.nextInt();
			
			
			int time = t[i] - t[i-1];
			int X = Math.abs(x[i] - x[i-1]);
			int Y = Math.abs(y[i] - y[i-1]);
			
			if(X+Y > time) { //到達不能条件
				System.out.println("No");
				return;
			}else if((X+Y) % 2 == 0) {
				if(time % 2 != 0) {
					System.out.println("No");
					return;
				}
				
				
			}else if((X+Y) % 2 != 0) {
				if(time% 2 == 0) {
					System.out.println("No");
					return;
				}
			}else {
				continue;
			}
		
			
		} t[i] = stdIn.nextInt() t[i] t i stdIn.nextInt() stdIn.nextInt stdIn x[i] = stdIn.nextInt() x[i] x i stdIn.nextInt() stdIn.nextInt stdIn y[i] = stdIn.nextInt() y[i] y i stdIn.nextInt() stdIn.nextInt stdIn int time = t[i] - t[i-1]; time t[i] - t[i-1] t[i] t i t[i-1] t i-1 i 1 int X = Math.abs(x[i] - x[i-1]); X Math.abs(x[i] - x[i-1]) Math.abs Math x[i] - x[i-1] x[i] x i x[i-1] x i-1 i 1 int Y = Math.abs(y[i] - y[i-1]); Y Math.abs(y[i] - y[i-1]) Math.abs Math y[i] - y[i-1] y[i] y i y[i-1] y i-1 i 1 if(X+Y > time) { //到達不能条件
				System.out.println("No");
				return;
			}else if((X+Y) % 2 == 0) {
				if(time % 2 != 0) {
					System.out.println("No");
					return;
				}
				
				
			}else if((X+Y) % 2 != 0) {
				if(time% 2 == 0) {
					System.out.println("No");
					return;
				}
			}else {
				continue;
			} X+Y > time X+Y X Y time { //到達不能条件
				System.out.println("No");
				return;
			} System.out.println("No") System.out.println System.out System System.out "No" return; if((X+Y) % 2 == 0) {
				if(time % 2 != 0) {
					System.out.println("No");
					return;
				}
				
				
			}else if((X+Y) % 2 != 0) {
				if(time% 2 == 0) {
					System.out.println("No");
					return;
				}
			}else {
				continue;
			} (X+Y) % 2 == 0 (X+Y) % 2 (X+Y) X Y 2 0 {
				if(time % 2 != 0) {
					System.out.println("No");
					return;
				}
				
				
			} if(time % 2 != 0) {
					System.out.println("No");
					return;
				} time % 2 != 0 time % 2 time 2 0 {
					System.out.println("No");
					return;
				} System.out.println("No") System.out.println System.out System System.out "No" return; if((X+Y) % 2 != 0) {
				if(time% 2 == 0) {
					System.out.println("No");
					return;
				}
			}else {
				continue;
			} (X+Y) % 2 != 0 (X+Y) % 2 (X+Y) X Y 2 0 {
				if(time% 2 == 0) {
					System.out.println("No");
					return;
				}
			} if(time% 2 == 0) {
					System.out.println("No");
					return;
				} time% 2 == 0 time% 2 time 2 0 {
					System.out.println("No");
					return;
				} System.out.println("No") System.out.println System.out System System.out "No" return; {
				continue;
			} continue; System.out.println("Yes") System.out.println System.out System System.out "Yes" String[] args args public class Main {

	public static void main(String[] args) {
		Scanner stdIn = new Scanner(System.in);
		
		/*<考察>
		 * (1,1)→(1,2)へ進むには奇数回必要(奇数回であれば絶対到達可能）
		 * ※(1,1)→(1,6)は5回以上の奇数回であれば到達可能であることを意味する
		 * 
		 * (1,1)→(1,1)に戻ったり(1,1)→(1,3)に行くには偶数回必要
		*/
		
		int n = stdIn.nextInt();
		
		int[] t = new int[n+1];
		int[] x = new int[n+1];
		int[] y = new int[n+1];
		
		t[0] = 0;
		x[0] = 0;
		y[0] = 0;
		
		for(int i = 1; i < n+1; i++) {
			 t[i] = stdIn.nextInt();
			 x[i] = stdIn.nextInt();
			 y[i] = stdIn.nextInt();
			
			
			int time = t[i] - t[i-1];
			int X = Math.abs(x[i] - x[i-1]);
			int Y = Math.abs(y[i] - y[i-1]);
			
			if(X+Y > time) { //到達不能条件
				System.out.println("No");
				return;
			}else if((X+Y) % 2 == 0) {
				if(time % 2 != 0) {
					System.out.println("No");
					return;
				}
				
				
			}else if((X+Y) % 2 != 0) {
				if(time% 2 == 0) {
					System.out.println("No");
					return;
				}
			}else {
				continue;
			}
		
			
		}
		
		System.out.println("Yes");
		
		
		
	}

} public class Main {

	public static void main(String[] args) {
		Scanner stdIn = new Scanner(System.in);
		
		/*<考察>
		 * (1,1)→(1,2)へ進むには奇数回必要(奇数回であれば絶対到達可能）
		 * ※(1,1)→(1,6)は5回以上の奇数回であれば到達可能であることを意味する
		 * 
		 * (1,1)→(1,1)に戻ったり(1,1)→(1,3)に行くには偶数回必要
		*/
		
		int n = stdIn.nextInt();
		
		int[] t = new int[n+1];
		int[] x = new int[n+1];
		int[] y = new int[n+1];
		
		t[0] = 0;
		x[0] = 0;
		y[0] = 0;
		
		for(int i = 1; i < n+1; i++) {
			 t[i] = stdIn.nextInt();
			 x[i] = stdIn.nextInt();
			 y[i] = stdIn.nextInt();
			
			
			int time = t[i] - t[i-1];
			int X = Math.abs(x[i] - x[i-1]);
			int Y = Math.abs(y[i] - y[i-1]);
			
			if(X+Y > time) { //到達不能条件
				System.out.println("No");
				return;
			}else if((X+Y) % 2 == 0) {
				if(time % 2 != 0) {
					System.out.println("No");
					return;
				}
				
				
			}else if((X+Y) % 2 != 0) {
				if(time% 2 == 0) {
					System.out.println("No");
					return;
				}
			}else {
				continue;
			}
		
			
		}
		
		System.out.println("Yes");
		
		
		
	}

} Main
import java.util.Scanner;
public class Main {

	public static void main(String[] args) {
		Scanner stdIn = new Scanner(System.in);
		
		/*<考察>
		 * (1,1)→(1,2)へ進むには奇数回必要(奇数回であれば絶対到達可能）
		 * ※(1,1)→(1,6)は5回以上の奇数回であれば到達可能であることを意味する
		 * 
		 * (1,1)→(1,1)に戻ったり(1,1)→(1,3)に行くには偶数回必要
		*/
		
		int n = stdIn.nextInt();
		
		int[] t = new int[n+1];
		int[] x = new int[n+1];
		int[] y = new int[n+1];
		
		t[0] = 0;
		x[0] = 0;
		y[0] = 0;
		
		for(int i = 1; i < n+1; i++) {
			 t[i] = stdIn.nextInt();
			 x[i] = stdIn.nextInt();
			 y[i] = stdIn.nextInt();
			
			
			int time = t[i] - t[i-1];
			int X = Math.abs(x[i] - x[i-1]);
			int Y = Math.abs(y[i] - y[i-1]);
			
			if(X+Y > time) { //到達不能条件
				System.out.println("No");
				return;
			}else if((X+Y) % 2 == 0) {
				if(time % 2 != 0) {
					System.out.println("No");
					return;
				}
				
				
			}else if((X+Y) % 2 != 0) {
				if(time% 2 == 0) {
					System.out.println("No");
					return;
				}
			}else {
				continue;
			}
		
			
		}
		
		System.out.println("Yes");
		
		
		
	}

}
