#include <bits/stdc++.h>
 
using namespace std;
 
typedef long long ll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
 
typedef int _loop_int;
#define REP(i,n) for(_loop_int i=0;i<(_loop_int)(n);++i)
#define FOR(i,a,b) for(_loop_int i=(_loop_int)(a);i<(_loop_int)(b);++i)
#define FORR(i,a,b) for(_loop_int i=(_loop_int)(b)-1;i>=(_loop_int)(a);--i)
 
#define DEBUG(x) cout<<#x<<": "<<x<<endl
#define DEBUG_VEC(v) cout<<#v<<":";REP(ix,v.size())cout<<" "<<v[ix];cout<<endl
#define ALL(a) (a).begin(),(a).end()
 
#define CHMIN(a,b) a=min((a),(b))
#define CHMAX(a,b) a=max((a),(b))
 
// mod
const ll MOD = 1000000007ll;
#define FIX(a) ((a)%MOD+MOD)%MOD
 
// floating
typedef double Real;
const Real EPS = 1e-11;
#define EQ0(x) (abs(x)<EPS)
#define EQ(a,b) (abs(a-b)<EPS)
typedef complex<Real> P;
 
const int INF = 2125252830;
 
int r,c,n;
pii ps[125252];
ll val[125252];
struct pii_hash {
  size_t operator () (const pii &p) const {
    return hash<int>{}(p.first) ^ hash<int>{}(hash<int>{}(p.second));
  }
};
unordered_map<pii,int,pii_hash> rev;
 
vi xs[125252];
vi ys[125252];
vector<pll> g[125252];
ll dist[125252];
bool used[125252];
 
bool po[125252];
vi node;
int vere[125252];
 
bool check(bool yoyoyo){
  int a = node.size();
  REP(i,a)vere[node[i]] = i;
  REP(i,a)dist[i] = 0;
  REP(i,a)used[i] = false;
  dist[0] = 0;
  used[0] = true;
  queue<int> Q;
  Q.push(0);
  while(!Q.empty()){
    int p = Q.front(); Q.pop();
    int id = node[p];
    ll d = dist[p];
    REP(i,g[id].size()){
      int to = vere[g[id][i].first];
      ll cost = g[id][i].second;
      ll nd = d+cost;
      if(used[to]){
        if(dist[to]!=nd)return false;
      }else{
        dist[to] = nd;
        used[to] = true;
        Q.push(to);
      }
    }
  }
  // negative check
  if(!yoyoyo){
    ll sm = *min_element(dist,dist+a);
    REP(i,a){
      ll po = INF;
      REP(j,ys[node[i]].size()){
        CHMIN(po,(ll)val[rev[pii(node[i],ys[node[i]][j])]]);
      }
      if(sm + po < 0){
        return false;
      }
      if(i==a-1)break;
      sm -= dist[i+1]-dist[i];
    }
  }else{
    ll sm = *min_element(dist,dist+a);
    REP(i,a){
      ll po = INF;
      REP(j,xs[node[i]].size()){
        CHMIN(po,(ll)val[rev[pii(xs[node[i]][j],node[i])]]);
      }
      if(sm + po < 0){
        return false;
      }
      if(i==a-1)break;
      sm -= dist[i+1]-dist[i];
    }
  }
  return true;
}
 
bool valid(int n,bool yoyoyo){
  REP(i,125252)po[i]=false;
  REP(i,n){
    if(po[i])continue;
    node.clear();
    po[i] = true;
    node.push_back(i);
    queue<int> Q;
    Q.push(i);
    while(!Q.empty()){
      int p = Q.front(); Q.pop();
      REP(j,g[p].size()){
        int to = g[p][j].first;
        if(po[to])continue;
        po[to] = true;
        node.push_back(to);
        Q.push(to);
      }
    }
    sort(ALL(node));
    // DEBUG_VEC(node);
    if(!check(yoyoyo))return false;
  }
  return true;
}
 
int main(){
  scanf("%d%d%d",&r,&c,&n);
  set<int> Sx,Sy;
  REP(i,n){
    int x,y,a;
    scanf("%d%d%d",&x,&y,&a);
    ps[i] = pii(x,y);
    val[i] = a;
    Sx.insert(x);
    Sy.insert(y);
  }
  map<int,int> Mx,My;
  int it = 0;
  for(const int& x:Sx){
    Mx[x] = it++;
  }
  r = it;
  it = 0;
  for(const int& y:Sy){
    My[y] = it++;
  }
  c = it;
 
  REP(i,n){
    int x,y;
    x=Mx[ps[i].first];
    y=My[ps[i].second];
    xs[y].push_back(x);
    ys[x].push_back(y);
    ps[i] = pii(x,y);
    rev[ps[i]] = i;
  }
  // graph
  REP(i,125252)g[i].clear();
  REP(i,r){
    sort(ALL(ys[i]));
    vi &vec = ys[i];
    REP(j,vec.size()-1){
      int s,t;
      s = vec[j];
      t = vec[j+1];
      int sid = rev[pii(i,s)];
      int tid = rev[pii(i,t)];
      ll sa = val[tid]-val[sid];
      g[s].push_back(pll(t,sa));
      g[t].push_back(pll(s,-sa));
    }
  }
  if(!valid(r,true)){
    puts("No");
    return 0;
  }
  // graph
  REP(i,125252)g[i].clear();
  REP(i,c){
    sort(ALL(xs[i]));
    vi &vec = xs[i];
    REP(j,vec.size()-1){
      int s,t;
      s = vec[j];
      t = vec[j+1];
      int sid = rev[pii(s,i)];
      int tid = rev[pii(t,i)];
      ll sa = val[tid]-val[sid];
      g[s].push_back(pll(t,sa));
      g[t].push_back(pll(s,-sa));
    }
  }
  if(!valid(c,false)){
    puts("No");
    return 0;
  }
  // ok
  puts("Yes");
  return 0;
}


Measured memory_bytes: 41764