'use strict';
const inputs = require('fs').readFileSync('/dev/stdin', 'utf8').trim().split('\n');

const RC = inputs[0].split(' ').map(Number);
const R = RC[0];
const C = RC[1];
const N = parseInt(inputs[1]);
const rca = inputs.slice(2);

let dist_x_odd = -1,
	dist_x_even = -1,
	dist_y_odd = -1,
	dist_y_even = -1;

let map_x_odd = new Map(),
	map_x_even = new Map(),
	map_y_odd = new Map(),
	map_y_even = new Map();

for (let i = 0; i < N; i++) {
	let rcai = rca[i].split(' '),
		r1 = parseInt(rcai[0]),
		c1 = parseInt(rcai[1]),
		a1 = parseInt(rcai[2]);
	
	if (R === 2) {
		if (map_y_even.has(c1)) {
			let ra2 = map_y_even.get(c1),
				r2 = ra2[0],
				a2 = ra2[1];
			
			let d = a2 - a1;
			
			if (dist_y_even === -1) {
				dist_y_even = d;
				
			} else {
				if (d !== dist_y_even) {
					console.log('No');
					process.exit();
				}
			}
			if (a1 - d * r1 < 0 ||
				a1 + d * (R - r1) < 0) {
				console.log('No');
				process.exit();
			}
			
		} else {
			map_y_even.set(c1, [r1, a1]);
		}
		
	} else {
		if (r1 % 2 === 0) {
			if (map_y_even.has(c1)) {
				let ra2 = map_y_even.get(c1),
					r2 = ra2[0],
					a2 = ra2[1];
				
				let d = (a2 - a1) / ((r2 - r1) / 2);
				
				if (dist_y_even === -1) {
					if (Math.round(d) !== d) {
						console.log('No');
						process.exit();
					}
					dist_y_even = d;
				} else {
					if (d !== dist_y_even) {
						console.log('No');
						process.exit();
					}
				}
				if (a1 - d * ((r1 / 2) - 1) < 0 ||
					a1 + d * Math.floor((R - r1) / 2) < 0) {
					console.log('No');
					process.exit();
				}
				
			} else {
				map_y_even.set(c1, [r1, a1]);
			}
			
		} else {
			if (map_y_odd.has(c1)) {
				let ra2 = map_y_odd.get(c1),
					r2 = ra2[0],
					a2 = ra2[1];
				
				let d = (a2 - a1) / ((r2 - r1) / 2);
				
				if (dist_y_odd === -1) {
					if (Math.round(d) !== d) {
						console.log('No');
						process.exit();
					}
					
					dist_y_odd = d;
				} else {
					if (d !== dist_y_odd) {
						console.log('No');
						process.exit();
					}
				}
				if (a1 - d * Math.floor(r1 / 2) < 0 ||
					a1 + d * Math.floor((R - r1) / 2) < 0) {
					console.log('No');
					process.exit();
				}
			} else {
				map_y_odd.set(c1, [r1, a1]);
			}
		}
	}
	
	if (C === 2) {
		if (map_x_even.has(r1)) {
			let ca2 = map_x_even.get(r1),
				c2 = ca2[0],
				a2 = ca2[1];
			
			let d = a2 - a1;
			
			if (dist_x_even === -1) {
				dist_x_even = d;
				
			} else {
				if (d !== dist_x_even) {
					console.log('No');
					process.exit();
				}
			}
			if (a1 - d * c1 < 0 ||
				a1 + d * (C - c1) < 0) {
				console.log('No');
				process.exit();
			}
			
		} else {
			map_x_even.set(r1, [c1, a1]);
		}
	} else {
		if (c1 % 2 == 0) {
			if (map_x_even.has(r1)) {
				let ca2 = map_x_even.get(r1),
					c2 = ca2[0],
					a2 = ca2[1];
				
				let d = (a2 - a1) / ((c2 - c1) / 2);
				
				if (dist_x_even === -1) {
					if (Math.round(d) !== d) {
						console.log('No');
						process.exit();
					}
					
					dist_x_even = d;
				} else {
					if (d !== dist_x_even) {
						console.log('No');
						process.exit();
					}
				}
				if (a1 - d * ((c1 / 2) - 1) < 0 ||
					a1 + d * Math.floor((C - c1) / 2) < 0) {
					console.log('No');
					process.exit();
				}
			} else {
				map_x_even.set(r1, [c1, a1]);
			}
			
		} else {
			if (map_x_odd.has(r1)) {
				let ca2 = map_x_odd.get(r1),
					c2 = ca2[0],
					a2 = ca2[1];
				
				let d = (a2 - a1) / ((c2 - c1) / 2);
				
				if (dist_x_odd === -1) {
					if (Math.round(d) !== d) {
						console.log('No');
						process.exit();
					}
					
					dist_x_odd = d;
				} else {
					if (d !== dist_x_odd) {
						console.log('No');
						process.exit();
					}
				}
				if (a1 - d * Math.floor(c1 / 2) < 0 ||
					a1 + d * Math.floor((C - c1) / 2) < 0) {
					console.log('No');
					process.exit();
				}
			} else {
				map_x_odd.set(r1, [c1, a1]);
			}
		}
	}
}


console.log('Yes');