#include <bits/stdc++.h>
using namespace std;
#define int long long
 
void say(string s){
	cout << s << endl;
	exit(0);
}
struct Edge{
	int to;
	int cost;
};

int RR;
vector<int> val;
vector<vector<Edge>> g;
vector<bool> done;

void dfs(int x,int v,bool first,int &rmi,int &cmi){
	if( done[x] ) return;
	else done[x] = true;
	
	if( first ) val[x] = 0;
	else val[x] = v;
	
	if( x >= RR ) cmi = min(cmi,val[x]);
	else rmi = min(rmi,val[x]);	
	
	for( auto e : g[x] ){
		dfs(e.to, e.cost - val[x], false, rmi, cmi );
	}
	
}
void solve(long long R, long long C, long long N, vector<long long> r, vector<long long> c, vector<long long> a){
	RR = R;
	auto row = [&](int x){ return x; };
	auto col = [&](int x){ return R+x; };
	g.resize(R+C);
	val.resize(R+C);
	done.resize(R+C);
	for(int i = 0 ; i < N ; i++){
		r[i]--;
		c[i]--;
		g[row(r[i])].push_back({col(c[i]),a[i]});
		g[col(c[i])].push_back({row(r[i]),a[i]});		
	}
	for(int i = 0 ; i < R + C ; i++){
		int rmi = 1e18;
		int cmi = 1e18;
		dfs(i,-1,true,rmi,cmi);
		
		if( rmi + cmi < 0 ) say("No");
		
	}
	for(int i = 0 ; i < N ; i++)
		if( val[row(r[i])] + val[col(c[i])] != a[i] ) say("No");

	say("Yes");
	
	
	
	
}
 
 
 
signed main(){	
	ios::sync_with_stdio(false);
	long long R;
	long long N;
	long long C;
	cin >> R;
	cin >> C;
	cin >> N;
	vector<long long> r(N-1+1);
	vector<long long> a(N-1+1);
	vector<long long> c(N-1+1);
	for(int i = 0 ; i <= N-1 ; i++){
		cin >> r[i];
		cin >> c[i];
		cin >> a[i];
	}
	solve(R, C, N, r, c, a);
	return 0;
}