import java.util.Scanner;

public class Main {
    public static void main(final String[] args) {
        final Scanner sc = new Scanner(System.in);
        final int N = sc.nextInt();
        int preT = 0;
        int preX = 0;
        int preY = 0;
        for (int i=0; i<N; i++) {
            int t = sc.nextInt();
            int x = sc.nextInt();
            int y = sc.nextInt();
            if(judgeValidMove(t - preT, x - preX, y - preY) == false) {
                System.out.println("No");
                return;
            }
            preT = t;
            preX = x;
            preY = y;
        }
        System.out.println("Yes");
        sc.close();
    }

    public static boolean judgeValidMove(int t,int x,int y){
        final int minDist = Math.abs(x) + Math.abs(y);
        final int difDist = t - minDist;
        // 到達可能な距離か
        if(difDist < 0){
            return false;
        }
        // 最短でたどり着いた時間と予定時間の差が偶数なら到達可能
        if(difDist % 2 == 0){
            return true;
        } else {
            return false;
        }
    }
} import java.util.Scanner; Scanner java.util public class Main {
    public static void main(final String[] args) {
        final Scanner sc = new Scanner(System.in);
        final int N = sc.nextInt();
        int preT = 0;
        int preX = 0;
        int preY = 0;
        for (int i=0; i<N; i++) {
            int t = sc.nextInt();
            int x = sc.nextInt();
            int y = sc.nextInt();
            if(judgeValidMove(t - preT, x - preX, y - preY) == false) {
                System.out.println("No");
                return;
            }
            preT = t;
            preX = x;
            preY = y;
        }
        System.out.println("Yes");
        sc.close();
    }

    public static boolean judgeValidMove(int t,int x,int y){
        final int minDist = Math.abs(x) + Math.abs(y);
        final int difDist = t - minDist;
        // 到達可能な距離か
        if(difDist < 0){
            return false;
        }
        // 最短でたどり着いた時間と予定時間の差が偶数なら到達可能
        if(difDist % 2 == 0){
            return true;
        } else {
            return false;
        }
    }
} Main public static void main(final String[] args) {
        final Scanner sc = new Scanner(System.in);
        final int N = sc.nextInt();
        int preT = 0;
        int preX = 0;
        int preY = 0;
        for (int i=0; i<N; i++) {
            int t = sc.nextInt();
            int x = sc.nextInt();
            int y = sc.nextInt();
            if(judgeValidMove(t - preT, x - preX, y - preY) == false) {
                System.out.println("No");
                return;
            }
            preT = t;
            preX = x;
            preY = y;
        }
        System.out.println("Yes");
        sc.close();
    } main {
        final Scanner sc = new Scanner(System.in);
        final int N = sc.nextInt();
        int preT = 0;
        int preX = 0;
        int preY = 0;
        for (int i=0; i<N; i++) {
            int t = sc.nextInt();
            int x = sc.nextInt();
            int y = sc.nextInt();
            if(judgeValidMove(t - preT, x - preX, y - preY) == false) {
                System.out.println("No");
                return;
            }
            preT = t;
            preX = x;
            preY = y;
        }
        System.out.println("Yes");
        sc.close();
    } final Scanner sc = new Scanner(System.in); sc new Scanner(System.in) final int N = sc.nextInt(); N sc.nextInt() sc.nextInt sc int preT = 0; preT 0 int preX = 0; preX 0 int preY = 0; preY 0 for (int i=0; i<N; i++) {
            int t = sc.nextInt();
            int x = sc.nextInt();
            int y = sc.nextInt();
            if(judgeValidMove(t - preT, x - preX, y - preY) == false) {
                System.out.println("No");
                return;
            }
            preT = t;
            preX = x;
            preY = y;
        } 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();
            if(judgeValidMove(t - preT, x - preX, y - preY) == false) {
                System.out.println("No");
                return;
            }
            preT = t;
            preX = x;
            preY = y;
        } {
            int t = sc.nextInt();
            int x = sc.nextInt();
            int y = sc.nextInt();
            if(judgeValidMove(t - preT, x - preX, y - preY) == false) {
                System.out.println("No");
                return;
            }
            preT = t;
            preX = x;
            preY = y;
        } 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 if(judgeValidMove(t - preT, x - preX, y - preY) == false) {
                System.out.println("No");
                return;
            } judgeValidMove(t - preT, x - preX, y - preY) == false judgeValidMove(t - preT, x - preX, y - preY) judgeValidMove t - preT t preT x - preX x preX y - preY y preY false {
                System.out.println("No");
                return;
            } System.out.println("No") System.out.println System.out System System.out "No" return; preT = t preT t preX = x preX x preY = y preY y System.out.println("Yes") System.out.println System.out System System.out "Yes" sc.close() sc.close sc final String[] args args public static boolean judgeValidMove(int t,int x,int y){
        final int minDist = Math.abs(x) + Math.abs(y);
        final int difDist = t - minDist;
        // 到達可能な距離か
        if(difDist < 0){
            return false;
        }
        // 最短でたどり着いた時間と予定時間の差が偶数なら到達可能
        if(difDist % 2 == 0){
            return true;
        } else {
            return false;
        }
    } judgeValidMove {
        final int minDist = Math.abs(x) + Math.abs(y);
        final int difDist = t - minDist;
        // 到達可能な距離か
        if(difDist < 0){
            return false;
        }
        // 最短でたどり着いた時間と予定時間の差が偶数なら到達可能
        if(difDist % 2 == 0){
            return true;
        } else {
            return false;
        }
    } final int minDist = Math.abs(x) + Math.abs(y); minDist Math.abs(x) + Math.abs(y) Math.abs(x) Math.abs Math x Math.abs(y) Math.abs Math y final int difDist = t - minDist; difDist t - minDist t minDist if(difDist < 0){
            return false;
        } difDist < 0 difDist 0 {
            return false;
        } return false; false if(difDist % 2 == 0){
            return true;
        } else {
            return false;
        } difDist % 2 == 0 difDist % 2 difDist 2 0 {
            return true;
        } return true; true {
            return false;
        } return false; false int t t int x x int y y public class Main {
    public static void main(final String[] args) {
        final Scanner sc = new Scanner(System.in);
        final int N = sc.nextInt();
        int preT = 0;
        int preX = 0;
        int preY = 0;
        for (int i=0; i<N; i++) {
            int t = sc.nextInt();
            int x = sc.nextInt();
            int y = sc.nextInt();
            if(judgeValidMove(t - preT, x - preX, y - preY) == false) {
                System.out.println("No");
                return;
            }
            preT = t;
            preX = x;
            preY = y;
        }
        System.out.println("Yes");
        sc.close();
    }

    public static boolean judgeValidMove(int t,int x,int y){
        final int minDist = Math.abs(x) + Math.abs(y);
        final int difDist = t - minDist;
        // 到達可能な距離か
        if(difDist < 0){
            return false;
        }
        // 最短でたどり着いた時間と予定時間の差が偶数なら到達可能
        if(difDist % 2 == 0){
            return true;
        } else {
            return false;
        }
    }
} public class Main {
    public static void main(final String[] args) {
        final Scanner sc = new Scanner(System.in);
        final int N = sc.nextInt();
        int preT = 0;
        int preX = 0;
        int preY = 0;
        for (int i=0; i<N; i++) {
            int t = sc.nextInt();
            int x = sc.nextInt();
            int y = sc.nextInt();
            if(judgeValidMove(t - preT, x - preX, y - preY) == false) {
                System.out.println("No");
                return;
            }
            preT = t;
            preX = x;
            preY = y;
        }
        System.out.println("Yes");
        sc.close();
    }

    public static boolean judgeValidMove(int t,int x,int y){
        final int minDist = Math.abs(x) + Math.abs(y);
        final int difDist = t - minDist;
        // 到達可能な距離か
        if(difDist < 0){
            return false;
        }
        // 最短でたどり着いた時間と予定時間の差が偶数なら到達可能
        if(difDist % 2 == 0){
            return true;
        } else {
            return false;
        }
    }
} Main
import java.util.Scanner;

public class Main {
    public static void main(final String[] args) {
        final Scanner sc = new Scanner(System.in);
        final int N = sc.nextInt();
        int preT = 0;
        int preX = 0;
        int preY = 0;
        for (int i=0; i<N; i++) {
            int t = sc.nextInt();
            int x = sc.nextInt();
            int y = sc.nextInt();
            if(judgeValidMove(t - preT, x - preX, y - preY) == false) {
                System.out.println("No");
                return;
            }
            preT = t;
            preX = x;
            preY = y;
        }
        System.out.println("Yes");
        sc.close();
    }

    public static boolean judgeValidMove(int t,int x,int y){
        final int minDist = Math.abs(x) + Math.abs(y);
        final int difDist = t - minDist;
        // 到達可能な距離か
        if(difDist < 0){
            return false;
        }
        // 最短でたどり着いた時間と予定時間の差が偶数なら到達可能
        if(difDist % 2 == 0){
            return true;
        } else {
            return false;
        }
    }
}