import java.util.*;
import java.util.stream.Collectors;
import java.io.*;
import java.nio.charset.StandardCharsets;

public class Main {
	public static void main(String[] args) throws IOException {
		InputStreamReader reader = new InputStreamReader(System.in, StandardCharsets.UTF_8);
		BufferedReader in = new BufferedReader(reader);
		Main ins = new Main(in);
		ins.calc();
		ins.showResult();
	}

	int N;
	Tuple[] points;
	boolean enable = true;

	static class Tuple {
		int t, x, y;

		Tuple(int t, int x, int y) {
			this.t = t;
			this.x = x;
			this.y = y;
		}
	}

	Main(BufferedReader in) throws IOException {
		N = Integer.parseInt(in.readLine());
		points = new Tuple[N + 1];
		points[0] = new Tuple(0, 0, 0);
		for (int i = 0; i < N; ++i) {
			String[] tokens = in.readLine().split(" ");
			int t = Integer.parseInt(tokens[0]);
			int x = Integer.parseInt(tokens[1]);
			int y = Integer.parseInt(tokens[2]);
			points[i + 1] = new Tuple(t, x, y);
		}
	}

	void calc() {
		for (int i = 0; i < N; ++i) {
			Tuple prev = points[i];
			Tuple next = points[i + 1];
			if (next.t - prev.t < Math.abs(next.x - prev.x) + Math.abs(next.y - prev.y)) {
				enable = false;
				return;
			} else if ((Math.abs(next.x - prev.x) + Math.abs(next.y - prev.y) - next.t - prev.t) % 2 != 0) {
				enable = false;
				return;
			}
		}
	}

	void showResult() {
		System.out.println((enable ? "Yes" : "No"));
	}
} import java.util.*; util.* java import java.util.stream.Collectors; Collectors java.util.stream import java.io.*; io.* java import java.nio.charset.StandardCharsets; StandardCharsets java.nio.charset public class Main {
	public static void main(String[] args) throws IOException {
		InputStreamReader reader = new InputStreamReader(System.in, StandardCharsets.UTF_8);
		BufferedReader in = new BufferedReader(reader);
		Main ins = new Main(in);
		ins.calc();
		ins.showResult();
	}

	int N;
	Tuple[] points;
	boolean enable = true;

	static class Tuple {
		int t, x, y;

		Tuple(int t, int x, int y) {
			this.t = t;
			this.x = x;
			this.y = y;
		}
	}

	Main(BufferedReader in) throws IOException {
		N = Integer.parseInt(in.readLine());
		points = new Tuple[N + 1];
		points[0] = new Tuple(0, 0, 0);
		for (int i = 0; i < N; ++i) {
			String[] tokens = in.readLine().split(" ");
			int t = Integer.parseInt(tokens[0]);
			int x = Integer.parseInt(tokens[1]);
			int y = Integer.parseInt(tokens[2]);
			points[i + 1] = new Tuple(t, x, y);
		}
	}

	void calc() {
		for (int i = 0; i < N; ++i) {
			Tuple prev = points[i];
			Tuple next = points[i + 1];
			if (next.t - prev.t < Math.abs(next.x - prev.x) + Math.abs(next.y - prev.y)) {
				enable = false;
				return;
			} else if ((Math.abs(next.x - prev.x) + Math.abs(next.y - prev.y) - next.t - prev.t) % 2 != 0) {
				enable = false;
				return;
			}
		}
	}

	void showResult() {
		System.out.println((enable ? "Yes" : "No"));
	}
} Main int N; N Tuple[] points; points boolean enable = true; enable true public static void main(String[] args) throws IOException {
		InputStreamReader reader = new InputStreamReader(System.in, StandardCharsets.UTF_8);
		BufferedReader in = new BufferedReader(reader);
		Main ins = new Main(in);
		ins.calc();
		ins.showResult();
	} main {
		InputStreamReader reader = new InputStreamReader(System.in, StandardCharsets.UTF_8);
		BufferedReader in = new BufferedReader(reader);
		Main ins = new Main(in);
		ins.calc();
		ins.showResult();
	} InputStreamReader reader = new InputStreamReader(System.in, StandardCharsets.UTF_8); reader new InputStreamReader(System.in, StandardCharsets.UTF_8) BufferedReader in = new BufferedReader(reader); in new BufferedReader(reader) Main ins = new Main(in); ins new Main(in) ins.calc() ins.calc ins ins.showResult() ins.showResult ins String[] args args Main(BufferedReader in) throws IOException {
		N = Integer.parseInt(in.readLine());
		points = new Tuple[N + 1];
		points[0] = new Tuple(0, 0, 0);
		for (int i = 0; i < N; ++i) {
			String[] tokens = in.readLine().split(" ");
			int t = Integer.parseInt(tokens[0]);
			int x = Integer.parseInt(tokens[1]);
			int y = Integer.parseInt(tokens[2]);
			points[i + 1] = new Tuple(t, x, y);
		}
	} Main {
		N = Integer.parseInt(in.readLine());
		points = new Tuple[N + 1];
		points[0] = new Tuple(0, 0, 0);
		for (int i = 0; i < N; ++i) {
			String[] tokens = in.readLine().split(" ");
			int t = Integer.parseInt(tokens[0]);
			int x = Integer.parseInt(tokens[1]);
			int y = Integer.parseInt(tokens[2]);
			points[i + 1] = new Tuple(t, x, y);
		}
	} N = Integer.parseInt(in.readLine()) N Integer.parseInt(in.readLine()) Integer.parseInt Integer in.readLine() in.readLine in points = new Tuple[N + 1] points new Tuple[N + 1] N + 1 N 1 points[0] = new Tuple(0, 0, 0) points[0] points 0 new Tuple(0, 0, 0) for (int i = 0; i < N; ++i) {
			String[] tokens = in.readLine().split(" ");
			int t = Integer.parseInt(tokens[0]);
			int x = Integer.parseInt(tokens[1]);
			int y = Integer.parseInt(tokens[2]);
			points[i + 1] = new Tuple(t, x, y);
		} int i = 0; int i = 0; i 0 i < N i N ++i ++i i {
			String[] tokens = in.readLine().split(" ");
			int t = Integer.parseInt(tokens[0]);
			int x = Integer.parseInt(tokens[1]);
			int y = Integer.parseInt(tokens[2]);
			points[i + 1] = new Tuple(t, x, y);
		} {
			String[] tokens = in.readLine().split(" ");
			int t = Integer.parseInt(tokens[0]);
			int x = Integer.parseInt(tokens[1]);
			int y = Integer.parseInt(tokens[2]);
			points[i + 1] = new Tuple(t, x, y);
		} String[] tokens = in.readLine().split(" "); tokens in.readLine().split(" ") in.readLine().split in.readLine() in.readLine in " " int t = Integer.parseInt(tokens[0]); t Integer.parseInt(tokens[0]) Integer.parseInt Integer tokens[0] tokens 0 int x = Integer.parseInt(tokens[1]); x Integer.parseInt(tokens[1]) Integer.parseInt Integer tokens[1] tokens 1 int y = Integer.parseInt(tokens[2]); y Integer.parseInt(tokens[2]) Integer.parseInt Integer tokens[2] tokens 2 points[i + 1] = new Tuple(t, x, y) points[i + 1] points i + 1 i 1 new Tuple(t, x, y) BufferedReader in in void calc() {
		for (int i = 0; i < N; ++i) {
			Tuple prev = points[i];
			Tuple next = points[i + 1];
			if (next.t - prev.t < Math.abs(next.x - prev.x) + Math.abs(next.y - prev.y)) {
				enable = false;
				return;
			} else if ((Math.abs(next.x - prev.x) + Math.abs(next.y - prev.y) - next.t - prev.t) % 2 != 0) {
				enable = false;
				return;
			}
		}
	} calc {
		for (int i = 0; i < N; ++i) {
			Tuple prev = points[i];
			Tuple next = points[i + 1];
			if (next.t - prev.t < Math.abs(next.x - prev.x) + Math.abs(next.y - prev.y)) {
				enable = false;
				return;
			} else if ((Math.abs(next.x - prev.x) + Math.abs(next.y - prev.y) - next.t - prev.t) % 2 != 0) {
				enable = false;
				return;
			}
		}
	} for (int i = 0; i < N; ++i) {
			Tuple prev = points[i];
			Tuple next = points[i + 1];
			if (next.t - prev.t < Math.abs(next.x - prev.x) + Math.abs(next.y - prev.y)) {
				enable = false;
				return;
			} else if ((Math.abs(next.x - prev.x) + Math.abs(next.y - prev.y) - next.t - prev.t) % 2 != 0) {
				enable = false;
				return;
			}
		} int i = 0; int i = 0; i 0 i < N i N ++i ++i i {
			Tuple prev = points[i];
			Tuple next = points[i + 1];
			if (next.t - prev.t < Math.abs(next.x - prev.x) + Math.abs(next.y - prev.y)) {
				enable = false;
				return;
			} else if ((Math.abs(next.x - prev.x) + Math.abs(next.y - prev.y) - next.t - prev.t) % 2 != 0) {
				enable = false;
				return;
			}
		} {
			Tuple prev = points[i];
			Tuple next = points[i + 1];
			if (next.t - prev.t < Math.abs(next.x - prev.x) + Math.abs(next.y - prev.y)) {
				enable = false;
				return;
			} else if ((Math.abs(next.x - prev.x) + Math.abs(next.y - prev.y) - next.t - prev.t) % 2 != 0) {
				enable = false;
				return;
			}
		} Tuple prev = points[i]; prev points[i] points i Tuple next = points[i + 1]; next points[i + 1] points i + 1 i 1 if (next.t - prev.t < Math.abs(next.x - prev.x) + Math.abs(next.y - prev.y)) {
				enable = false;
				return;
			} else if ((Math.abs(next.x - prev.x) + Math.abs(next.y - prev.y) - next.t - prev.t) % 2 != 0) {
				enable = false;
				return;
			} next.t - prev.t < Math.abs(next.x - prev.x) + Math.abs(next.y - prev.y) next.t - prev.t next.t next next.t prev.t prev prev.t Math.abs(next.x - prev.x) + Math.abs(next.y - prev.y) Math.abs(next.x - prev.x) Math.abs Math next.x - prev.x next.x next next.x prev.x prev prev.x Math.abs(next.y - prev.y) Math.abs Math next.y - prev.y next.y next next.y prev.y prev prev.y {
				enable = false;
				return;
			} enable = false enable false return; if ((Math.abs(next.x - prev.x) + Math.abs(next.y - prev.y) - next.t - prev.t) % 2 != 0) {
				enable = false;
				return;
			} (Math.abs(next.x - prev.x) + Math.abs(next.y - prev.y) - next.t - prev.t) % 2 != 0 (Math.abs(next.x - prev.x) + Math.abs(next.y - prev.y) - next.t - prev.t) % 2 (Math.abs(next.x - prev.x) + Math.abs(next.y - prev.y) - next.t - prev.t) Math.abs(next.x - prev.x) + Math.abs(next.y - prev.y) - next.t - prev.t Math.abs(next.x - prev.x) + Math.abs(next.y - prev.y) Math.abs(next.x - prev.x) Math.abs Math next.x - prev.x next.x next next.x prev.x prev prev.x Math.abs(next.y - prev.y) Math.abs Math next.y - prev.y next.y next next.y prev.y prev prev.y next.t next next.t prev.t prev prev.t 2 0 {
				enable = false;
				return;
			} enable = false enable false return; void showResult() {
		System.out.println((enable ? "Yes" : "No"));
	} showResult {
		System.out.println((enable ? "Yes" : "No"));
	} System.out.println((enable ? "Yes" : "No")) System.out.println System.out System System.out (enable ? "Yes" : "No") enable "Yes" "No" static class Tuple {
		int t, x, y;

		Tuple(int t, int x, int y) {
			this.t = t;
			this.x = x;
			this.y = y;
		}
	} Tuple int t t x x y; y Tuple(int t, int x, int y) {
			this.t = t;
			this.x = x;
			this.y = y;
		} Tuple {
			this.t = t;
			this.x = x;
			this.y = y;
		} this.t = t this.t this this.t t this.x = x this.x this this.x x this.y = y this.y this this.y y int t t int x x int y y public class Main {
	public static void main(String[] args) throws IOException {
		InputStreamReader reader = new InputStreamReader(System.in, StandardCharsets.UTF_8);
		BufferedReader in = new BufferedReader(reader);
		Main ins = new Main(in);
		ins.calc();
		ins.showResult();
	}

	int N;
	Tuple[] points;
	boolean enable = true;

	static class Tuple {
		int t, x, y;

		Tuple(int t, int x, int y) {
			this.t = t;
			this.x = x;
			this.y = y;
		}
	}

	Main(BufferedReader in) throws IOException {
		N = Integer.parseInt(in.readLine());
		points = new Tuple[N + 1];
		points[0] = new Tuple(0, 0, 0);
		for (int i = 0; i < N; ++i) {
			String[] tokens = in.readLine().split(" ");
			int t = Integer.parseInt(tokens[0]);
			int x = Integer.parseInt(tokens[1]);
			int y = Integer.parseInt(tokens[2]);
			points[i + 1] = new Tuple(t, x, y);
		}
	}

	void calc() {
		for (int i = 0; i < N; ++i) {
			Tuple prev = points[i];
			Tuple next = points[i + 1];
			if (next.t - prev.t < Math.abs(next.x - prev.x) + Math.abs(next.y - prev.y)) {
				enable = false;
				return;
			} else if ((Math.abs(next.x - prev.x) + Math.abs(next.y - prev.y) - next.t - prev.t) % 2 != 0) {
				enable = false;
				return;
			}
		}
	}

	void showResult() {
		System.out.println((enable ? "Yes" : "No"));
	}
} public class Main {
	public static void main(String[] args) throws IOException {
		InputStreamReader reader = new InputStreamReader(System.in, StandardCharsets.UTF_8);
		BufferedReader in = new BufferedReader(reader);
		Main ins = new Main(in);
		ins.calc();
		ins.showResult();
	}

	int N;
	Tuple[] points;
	boolean enable = true;

	static class Tuple {
		int t, x, y;

		Tuple(int t, int x, int y) {
			this.t = t;
			this.x = x;
			this.y = y;
		}
	}

	Main(BufferedReader in) throws IOException {
		N = Integer.parseInt(in.readLine());
		points = new Tuple[N + 1];
		points[0] = new Tuple(0, 0, 0);
		for (int i = 0; i < N; ++i) {
			String[] tokens = in.readLine().split(" ");
			int t = Integer.parseInt(tokens[0]);
			int x = Integer.parseInt(tokens[1]);
			int y = Integer.parseInt(tokens[2]);
			points[i + 1] = new Tuple(t, x, y);
		}
	}

	void calc() {
		for (int i = 0; i < N; ++i) {
			Tuple prev = points[i];
			Tuple next = points[i + 1];
			if (next.t - prev.t < Math.abs(next.x - prev.x) + Math.abs(next.y - prev.y)) {
				enable = false;
				return;
			} else if ((Math.abs(next.x - prev.x) + Math.abs(next.y - prev.y) - next.t - prev.t) % 2 != 0) {
				enable = false;
				return;
			}
		}
	}

	void showResult() {
		System.out.println((enable ? "Yes" : "No"));
	}
} Main
import java.util.*;
import java.util.stream.Collectors;
import java.io.*;
import java.nio.charset.StandardCharsets;

public class Main {
	public static void main(String[] args) throws IOException {
		InputStreamReader reader = new InputStreamReader(System.in, StandardCharsets.UTF_8);
		BufferedReader in = new BufferedReader(reader);
		Main ins = new Main(in);
		ins.calc();
		ins.showResult();
	}

	int N;
	Tuple[] points;
	boolean enable = true;

	static class Tuple {
		int t, x, y;

		Tuple(int t, int x, int y) {
			this.t = t;
			this.x = x;
			this.y = y;
		}
	}

	Main(BufferedReader in) throws IOException {
		N = Integer.parseInt(in.readLine());
		points = new Tuple[N + 1];
		points[0] = new Tuple(0, 0, 0);
		for (int i = 0; i < N; ++i) {
			String[] tokens = in.readLine().split(" ");
			int t = Integer.parseInt(tokens[0]);
			int x = Integer.parseInt(tokens[1]);
			int y = Integer.parseInt(tokens[2]);
			points[i + 1] = new Tuple(t, x, y);
		}
	}

	void calc() {
		for (int i = 0; i < N; ++i) {
			Tuple prev = points[i];
			Tuple next = points[i + 1];
			if (next.t - prev.t < Math.abs(next.x - prev.x) + Math.abs(next.y - prev.y)) {
				enable = false;
				return;
			} else if ((Math.abs(next.x - prev.x) + Math.abs(next.y - prev.y) - next.t - prev.t) % 2 != 0) {
				enable = false;
				return;
			}
		}
	}

	void showResult() {
		System.out.println((enable ? "Yes" : "No"));
	}
}