
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int N = scanner.nextInt();
        List<CheckPoint> checkPoints= new ArrayList<>();
        for (int i=0; i<N; i++) {
            checkPoints.add(new CheckPoint(scanner.nextInt(), scanner.nextInt(), scanner.nextInt()));
        }

        System.out.println(canDo(checkPoints) ? "Yes" : "No");
    }

    private static boolean canDo(List<CheckPoint> checkPoints) {
        CheckPoint from = new CheckPoint(0, 0, 0);
        CheckPoint to;
        for (int i=0; i < checkPoints.size(); i++) {
            to = checkPoints.get(i);
            int differenceTime = to.time - from.time;
            int distance = to.x - from.x + to.y - from.y;

            if (distance > differenceTime) {
                return false;
            }

            if (differenceTime % 2 == 0) {
                // 時間差が偶数
                if (distance % 2 != 0) {
                    return false;
                }
            } else {
                // 時間差が奇数
                if (distance % 2 == 0) {
                    return false;
                }
            }
            from = checkPoints.get(i);
        }
        return true;
    }

    static class CheckPoint {
        private int time;
        private int x;
        private int y;
        public CheckPoint(int time, int x, int y) {
            this.time = time;
            this.x = x;
            this.y = y;
        }
    }
} import java.util.ArrayList; ArrayList java.util import java.util.List; List java.util import java.util.Scanner; Scanner java.util public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int N = scanner.nextInt();
        List<CheckPoint> checkPoints= new ArrayList<>();
        for (int i=0; i<N; i++) {
            checkPoints.add(new CheckPoint(scanner.nextInt(), scanner.nextInt(), scanner.nextInt()));
        }

        System.out.println(canDo(checkPoints) ? "Yes" : "No");
    }

    private static boolean canDo(List<CheckPoint> checkPoints) {
        CheckPoint from = new CheckPoint(0, 0, 0);
        CheckPoint to;
        for (int i=0; i < checkPoints.size(); i++) {
            to = checkPoints.get(i);
            int differenceTime = to.time - from.time;
            int distance = to.x - from.x + to.y - from.y;

            if (distance > differenceTime) {
                return false;
            }

            if (differenceTime % 2 == 0) {
                // 時間差が偶数
                if (distance % 2 != 0) {
                    return false;
                }
            } else {
                // 時間差が奇数
                if (distance % 2 == 0) {
                    return false;
                }
            }
            from = checkPoints.get(i);
        }
        return true;
    }

    static class CheckPoint {
        private int time;
        private int x;
        private int y;
        public CheckPoint(int time, int x, int y) {
            this.time = time;
            this.x = x;
            this.y = y;
        }
    }
} Main public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int N = scanner.nextInt();
        List<CheckPoint> checkPoints= new ArrayList<>();
        for (int i=0; i<N; i++) {
            checkPoints.add(new CheckPoint(scanner.nextInt(), scanner.nextInt(), scanner.nextInt()));
        }

        System.out.println(canDo(checkPoints) ? "Yes" : "No");
    } main {
        Scanner scanner = new Scanner(System.in);
        int N = scanner.nextInt();
        List<CheckPoint> checkPoints= new ArrayList<>();
        for (int i=0; i<N; i++) {
            checkPoints.add(new CheckPoint(scanner.nextInt(), scanner.nextInt(), scanner.nextInt()));
        }

        System.out.println(canDo(checkPoints) ? "Yes" : "No");
    } Scanner scanner = new Scanner(System.in); scanner new Scanner(System.in) int N = scanner.nextInt(); N scanner.nextInt() scanner.nextInt scanner List<CheckPoint> checkPoints= new ArrayList<>(); checkPoints new ArrayList<>() for (int i=0; i<N; i++) {
            checkPoints.add(new CheckPoint(scanner.nextInt(), scanner.nextInt(), scanner.nextInt()));
        } int i=0; int i=0; i 0 i<N i N i++ i++ i {
            checkPoints.add(new CheckPoint(scanner.nextInt(), scanner.nextInt(), scanner.nextInt()));
        } {
            checkPoints.add(new CheckPoint(scanner.nextInt(), scanner.nextInt(), scanner.nextInt()));
        } checkPoints.add(new CheckPoint(scanner.nextInt(), scanner.nextInt(), scanner.nextInt())) checkPoints.add checkPoints new CheckPoint(scanner.nextInt(), scanner.nextInt(), scanner.nextInt()) System.out.println(canDo(checkPoints) ? "Yes" : "No") System.out.println System.out System System.out canDo(checkPoints) ? "Yes" : "No" canDo(checkPoints) canDo checkPoints "Yes" "No" String[] args args private static boolean canDo(List<CheckPoint> checkPoints) {
        CheckPoint from = new CheckPoint(0, 0, 0);
        CheckPoint to;
        for (int i=0; i < checkPoints.size(); i++) {
            to = checkPoints.get(i);
            int differenceTime = to.time - from.time;
            int distance = to.x - from.x + to.y - from.y;

            if (distance > differenceTime) {
                return false;
            }

            if (differenceTime % 2 == 0) {
                // 時間差が偶数
                if (distance % 2 != 0) {
                    return false;
                }
            } else {
                // 時間差が奇数
                if (distance % 2 == 0) {
                    return false;
                }
            }
            from = checkPoints.get(i);
        }
        return true;
    } canDo {
        CheckPoint from = new CheckPoint(0, 0, 0);
        CheckPoint to;
        for (int i=0; i < checkPoints.size(); i++) {
            to = checkPoints.get(i);
            int differenceTime = to.time - from.time;
            int distance = to.x - from.x + to.y - from.y;

            if (distance > differenceTime) {
                return false;
            }

            if (differenceTime % 2 == 0) {
                // 時間差が偶数
                if (distance % 2 != 0) {
                    return false;
                }
            } else {
                // 時間差が奇数
                if (distance % 2 == 0) {
                    return false;
                }
            }
            from = checkPoints.get(i);
        }
        return true;
    } CheckPoint from = new CheckPoint(0, 0, 0); from new CheckPoint(0, 0, 0) CheckPoint to; to for (int i=0; i < checkPoints.size(); i++) {
            to = checkPoints.get(i);
            int differenceTime = to.time - from.time;
            int distance = to.x - from.x + to.y - from.y;

            if (distance > differenceTime) {
                return false;
            }

            if (differenceTime % 2 == 0) {
                // 時間差が偶数
                if (distance % 2 != 0) {
                    return false;
                }
            } else {
                // 時間差が奇数
                if (distance % 2 == 0) {
                    return false;
                }
            }
            from = checkPoints.get(i);
        } int i=0; int i=0; i 0 i < checkPoints.size() i checkPoints.size() checkPoints.size checkPoints i++ i++ i {
            to = checkPoints.get(i);
            int differenceTime = to.time - from.time;
            int distance = to.x - from.x + to.y - from.y;

            if (distance > differenceTime) {
                return false;
            }

            if (differenceTime % 2 == 0) {
                // 時間差が偶数
                if (distance % 2 != 0) {
                    return false;
                }
            } else {
                // 時間差が奇数
                if (distance % 2 == 0) {
                    return false;
                }
            }
            from = checkPoints.get(i);
        } {
            to = checkPoints.get(i);
            int differenceTime = to.time - from.time;
            int distance = to.x - from.x + to.y - from.y;

            if (distance > differenceTime) {
                return false;
            }

            if (differenceTime % 2 == 0) {
                // 時間差が偶数
                if (distance % 2 != 0) {
                    return false;
                }
            } else {
                // 時間差が奇数
                if (distance % 2 == 0) {
                    return false;
                }
            }
            from = checkPoints.get(i);
        } to = checkPoints.get(i) to checkPoints.get(i) checkPoints.get checkPoints i int differenceTime = to.time - from.time; differenceTime to.time - from.time to.time to to.time from.time from from.time int distance = to.x - from.x + to.y - from.y; distance to.x - from.x + to.y - from.y to.x - from.x + to.y to.x - from.x to.x to to.x from.x from from.x to.y to to.y from.y from from.y if (distance > differenceTime) {
                return false;
            } distance > differenceTime distance differenceTime {
                return false;
            } return false; false if (differenceTime % 2 == 0) {
                // 時間差が偶数
                if (distance % 2 != 0) {
                    return false;
                }
            } else {
                // 時間差が奇数
                if (distance % 2 == 0) {
                    return false;
                }
            } differenceTime % 2 == 0 differenceTime % 2 differenceTime 2 0 {
                // 時間差が偶数
                if (distance % 2 != 0) {
                    return false;
                }
            } if (distance % 2 != 0) {
                    return false;
                } distance % 2 != 0 distance % 2 distance 2 0 {
                    return false;
                } return false; false {
                // 時間差が奇数
                if (distance % 2 == 0) {
                    return false;
                }
            } if (distance % 2 == 0) {
                    return false;
                } distance % 2 == 0 distance % 2 distance 2 0 {
                    return false;
                } return false; false from = checkPoints.get(i) from checkPoints.get(i) checkPoints.get checkPoints i return true; true List<CheckPoint> checkPoints checkPoints static class CheckPoint {
        private int time;
        private int x;
        private int y;
        public CheckPoint(int time, int x, int y) {
            this.time = time;
            this.x = x;
            this.y = y;
        }
    } CheckPoint private int time; time private int x; x private int y; y public CheckPoint(int time, int x, int y) {
            this.time = time;
            this.x = x;
            this.y = y;
        } CheckPoint {
            this.time = time;
            this.x = x;
            this.y = y;
        } this.time = time this.time this this.time time this.x = x this.x this this.x x this.y = y this.y this this.y y int time time int x x int y y public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int N = scanner.nextInt();
        List<CheckPoint> checkPoints= new ArrayList<>();
        for (int i=0; i<N; i++) {
            checkPoints.add(new CheckPoint(scanner.nextInt(), scanner.nextInt(), scanner.nextInt()));
        }

        System.out.println(canDo(checkPoints) ? "Yes" : "No");
    }

    private static boolean canDo(List<CheckPoint> checkPoints) {
        CheckPoint from = new CheckPoint(0, 0, 0);
        CheckPoint to;
        for (int i=0; i < checkPoints.size(); i++) {
            to = checkPoints.get(i);
            int differenceTime = to.time - from.time;
            int distance = to.x - from.x + to.y - from.y;

            if (distance > differenceTime) {
                return false;
            }

            if (differenceTime % 2 == 0) {
                // 時間差が偶数
                if (distance % 2 != 0) {
                    return false;
                }
            } else {
                // 時間差が奇数
                if (distance % 2 == 0) {
                    return false;
                }
            }
            from = checkPoints.get(i);
        }
        return true;
    }

    static class CheckPoint {
        private int time;
        private int x;
        private int y;
        public CheckPoint(int time, int x, int y) {
            this.time = time;
            this.x = x;
            this.y = y;
        }
    }
} public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int N = scanner.nextInt();
        List<CheckPoint> checkPoints= new ArrayList<>();
        for (int i=0; i<N; i++) {
            checkPoints.add(new CheckPoint(scanner.nextInt(), scanner.nextInt(), scanner.nextInt()));
        }

        System.out.println(canDo(checkPoints) ? "Yes" : "No");
    }

    private static boolean canDo(List<CheckPoint> checkPoints) {
        CheckPoint from = new CheckPoint(0, 0, 0);
        CheckPoint to;
        for (int i=0; i < checkPoints.size(); i++) {
            to = checkPoints.get(i);
            int differenceTime = to.time - from.time;
            int distance = to.x - from.x + to.y - from.y;

            if (distance > differenceTime) {
                return false;
            }

            if (differenceTime % 2 == 0) {
                // 時間差が偶数
                if (distance % 2 != 0) {
                    return false;
                }
            } else {
                // 時間差が奇数
                if (distance % 2 == 0) {
                    return false;
                }
            }
            from = checkPoints.get(i);
        }
        return true;
    }

    static class CheckPoint {
        private int time;
        private int x;
        private int y;
        public CheckPoint(int time, int x, int y) {
            this.time = time;
            this.x = x;
            this.y = y;
        }
    }
} Main

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int N = scanner.nextInt();
        List<CheckPoint> checkPoints= new ArrayList<>();
        for (int i=0; i<N; i++) {
            checkPoints.add(new CheckPoint(scanner.nextInt(), scanner.nextInt(), scanner.nextInt()));
        }

        System.out.println(canDo(checkPoints) ? "Yes" : "No");
    }

    private static boolean canDo(List<CheckPoint> checkPoints) {
        CheckPoint from = new CheckPoint(0, 0, 0);
        CheckPoint to;
        for (int i=0; i < checkPoints.size(); i++) {
            to = checkPoints.get(i);
            int differenceTime = to.time - from.time;
            int distance = to.x - from.x + to.y - from.y;

            if (distance > differenceTime) {
                return false;
            }

            if (differenceTime % 2 == 0) {
                // 時間差が偶数
                if (distance % 2 != 0) {
                    return false;
                }
            } else {
                // 時間差が奇数
                if (distance % 2 == 0) {
                    return false;
                }
            }
            from = checkPoints.get(i);
        }
        return true;
    }

    static class CheckPoint {
        private int time;
        private int x;
        private int y;
        public CheckPoint(int time, int x, int y) {
            this.time = time;
            this.x = x;
            this.y = y;
        }
    }
}