import java.util.*;

class Main{
	public static void main(String args[]){
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int[] t = new int[n];
		int[] x = new int[n];
		int[] y = new int[n];
		boolean flag = true;
		int rtime = 0;
		int nx = 0;
		int ny = 0;
		for(int i = 0; i < n; i++){
			t[i] = sc.nextInt();
			x[i] = sc.nextInt();
			y[i] = sc.nextInt();
		}
		for(int i = 0; i < n && flag; i++){
			int itime = t[i] - rtime;
			rtime = t[i];
			int wtime = Math.max(nx,x[i])-Math.min(nx,x[i])+Math.max(ny,y[i])-Math.min(ny,y[i]);
			if(itime < wtime){
				flag = false;
				break;
			}else if(itime > wtime){
				if((itime-wtime)%2==1){
					flag = false;
					break;
				}
			}
			ny = y[i];
			nx = x[i];
		}
		System.out.print(flag?"Yes":"No");
	}
} import java.util.*; util.* java class Main{
	public static void main(String args[]){
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int[] t = new int[n];
		int[] x = new int[n];
		int[] y = new int[n];
		boolean flag = true;
		int rtime = 0;
		int nx = 0;
		int ny = 0;
		for(int i = 0; i < n; i++){
			t[i] = sc.nextInt();
			x[i] = sc.nextInt();
			y[i] = sc.nextInt();
		}
		for(int i = 0; i < n && flag; i++){
			int itime = t[i] - rtime;
			rtime = t[i];
			int wtime = Math.max(nx,x[i])-Math.min(nx,x[i])+Math.max(ny,y[i])-Math.min(ny,y[i]);
			if(itime < wtime){
				flag = false;
				break;
			}else if(itime > wtime){
				if((itime-wtime)%2==1){
					flag = false;
					break;
				}
			}
			ny = y[i];
			nx = x[i];
		}
		System.out.print(flag?"Yes":"No");
	}
} Main public static void main(String args[]){
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int[] t = new int[n];
		int[] x = new int[n];
		int[] y = new int[n];
		boolean flag = true;
		int rtime = 0;
		int nx = 0;
		int ny = 0;
		for(int i = 0; i < n; i++){
			t[i] = sc.nextInt();
			x[i] = sc.nextInt();
			y[i] = sc.nextInt();
		}
		for(int i = 0; i < n && flag; i++){
			int itime = t[i] - rtime;
			rtime = t[i];
			int wtime = Math.max(nx,x[i])-Math.min(nx,x[i])+Math.max(ny,y[i])-Math.min(ny,y[i]);
			if(itime < wtime){
				flag = false;
				break;
			}else if(itime > wtime){
				if((itime-wtime)%2==1){
					flag = false;
					break;
				}
			}
			ny = y[i];
			nx = x[i];
		}
		System.out.print(flag?"Yes":"No");
	} main {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int[] t = new int[n];
		int[] x = new int[n];
		int[] y = new int[n];
		boolean flag = true;
		int rtime = 0;
		int nx = 0;
		int ny = 0;
		for(int i = 0; i < n; i++){
			t[i] = sc.nextInt();
			x[i] = sc.nextInt();
			y[i] = sc.nextInt();
		}
		for(int i = 0; i < n && flag; i++){
			int itime = t[i] - rtime;
			rtime = t[i];
			int wtime = Math.max(nx,x[i])-Math.min(nx,x[i])+Math.max(ny,y[i])-Math.min(ny,y[i]);
			if(itime < wtime){
				flag = false;
				break;
			}else if(itime > wtime){
				if((itime-wtime)%2==1){
					flag = false;
					break;
				}
			}
			ny = y[i];
			nx = x[i];
		}
		System.out.print(flag?"Yes":"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]; t new int[n] n int[] x = new int[n]; x new int[n] n int[] y = new int[n]; y new int[n] n boolean flag = true; flag true int rtime = 0; rtime 0 int nx = 0; nx 0 int ny = 0; ny 0 for(int i = 0; i < n; i++){
			t[i] = sc.nextInt();
			x[i] = sc.nextInt();
			y[i] = sc.nextInt();
		} int i = 0; int i = 0; i 0 i < n i n i++ i++ i {
			t[i] = sc.nextInt();
			x[i] = sc.nextInt();
			y[i] = sc.nextInt();
		} {
			t[i] = sc.nextInt();
			x[i] = sc.nextInt();
			y[i] = sc.nextInt();
		} 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 for(int i = 0; i < n && flag; i++){
			int itime = t[i] - rtime;
			rtime = t[i];
			int wtime = Math.max(nx,x[i])-Math.min(nx,x[i])+Math.max(ny,y[i])-Math.min(ny,y[i]);
			if(itime < wtime){
				flag = false;
				break;
			}else if(itime > wtime){
				if((itime-wtime)%2==1){
					flag = false;
					break;
				}
			}
			ny = y[i];
			nx = x[i];
		} int i = 0; int i = 0; i 0 i < n && flag i < n i n flag i++ i++ i {
			int itime = t[i] - rtime;
			rtime = t[i];
			int wtime = Math.max(nx,x[i])-Math.min(nx,x[i])+Math.max(ny,y[i])-Math.min(ny,y[i]);
			if(itime < wtime){
				flag = false;
				break;
			}else if(itime > wtime){
				if((itime-wtime)%2==1){
					flag = false;
					break;
				}
			}
			ny = y[i];
			nx = x[i];
		} {
			int itime = t[i] - rtime;
			rtime = t[i];
			int wtime = Math.max(nx,x[i])-Math.min(nx,x[i])+Math.max(ny,y[i])-Math.min(ny,y[i]);
			if(itime < wtime){
				flag = false;
				break;
			}else if(itime > wtime){
				if((itime-wtime)%2==1){
					flag = false;
					break;
				}
			}
			ny = y[i];
			nx = x[i];
		} int itime = t[i] - rtime; itime t[i] - rtime t[i] t i rtime rtime = t[i] rtime t[i] t i int wtime = Math.max(nx,x[i])-Math.min(nx,x[i])+Math.max(ny,y[i])-Math.min(ny,y[i]); wtime Math.max(nx,x[i])-Math.min(nx,x[i])+Math.max(ny,y[i])-Math.min(ny,y[i]) Math.max(nx,x[i])-Math.min(nx,x[i])+Math.max(ny,y[i]) Math.max(nx,x[i])-Math.min(nx,x[i]) Math.max(nx,x[i]) Math.max Math nx x[i] x i Math.min(nx,x[i]) Math.min Math nx x[i] x i Math.max(ny,y[i]) Math.max Math ny y[i] y i Math.min(ny,y[i]) Math.min Math ny y[i] y i if(itime < wtime){
				flag = false;
				break;
			}else if(itime > wtime){
				if((itime-wtime)%2==1){
					flag = false;
					break;
				}
			} itime < wtime itime wtime {
				flag = false;
				break;
			} flag = false flag false break; if(itime > wtime){
				if((itime-wtime)%2==1){
					flag = false;
					break;
				}
			} itime > wtime itime wtime {
				if((itime-wtime)%2==1){
					flag = false;
					break;
				}
			} if((itime-wtime)%2==1){
					flag = false;
					break;
				} (itime-wtime)%2==1 (itime-wtime)%2 (itime-wtime) itime wtime 2 1 {
					flag = false;
					break;
				} flag = false flag false break; ny = y[i] ny y[i] y i nx = x[i] nx x[i] x i System.out.print(flag?"Yes":"No") System.out.print System.out System System.out flag?"Yes":"No" flag "Yes" "No" String args[] args
import java.util.*;

class Main{
	public static void main(String args[]){
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int[] t = new int[n];
		int[] x = new int[n];
		int[] y = new int[n];
		boolean flag = true;
		int rtime = 0;
		int nx = 0;
		int ny = 0;
		for(int i = 0; i < n; i++){
			t[i] = sc.nextInt();
			x[i] = sc.nextInt();
			y[i] = sc.nextInt();
		}
		for(int i = 0; i < n && flag; i++){
			int itime = t[i] - rtime;
			rtime = t[i];
			int wtime = Math.max(nx,x[i])-Math.min(nx,x[i])+Math.max(ny,y[i])-Math.min(ny,y[i]);
			if(itime < wtime){
				flag = false;
				break;
			}else if(itime > wtime){
				if((itime-wtime)%2==1){
					flag = false;
					break;
				}
			}
			ny = y[i];
			nx = x[i];
		}
		System.out.print(flag?"Yes":"No");
	}
}
