import java.util.*;

class Main {
    public static void main(String[] args) {
        new Solver().run();
    }
}

class Point {
    int x;
    int y;

    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public int distanceTo(Point other) {
        return Math.abs(x - other.x) + Math.abs(y - other.y);
    }

    public String toString() {
        return String.format("(%d, %d)", x, y);
    }
}

class Solver {

    private boolean reachable(int difft, int d) {
        int diff = difft - d;
        if (diff < 0)  return false;
        if ((diff % 2) == 0) return true;
        return false;
    }

    public void run() {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        int[] t = new int[N];
        Point[] p = new Point[N];


        int sum = 0;
        for (int i = 0; i < N; i++) {
            t[i] = sc.nextInt();
            p[i] = new Point(sc.nextInt(), sc.nextInt());
        }

        int curt = 0;
        Point curp = new Point(0, 0);
        for (int i = 0; i < N; i++) {
            int nxtt = t[i];
            Point dst = p[i];
            int d = curp.distanceTo(dst);
            if (!reachable(nxtt - curt, d)) {
                System.out.println("No");
                return;
            }
            curt = nxtt;
            curp = dst;
        }

        System.out.println("Yes");
        return;
    }

}
/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