#include <cmath>
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

struct node
{
	int x,y,z;
	bool operator <(node a)const {return x<a.x;}
}a[100010];

int fa[100010],d[100010];

int find(int x)
{
	if (x==fa[x]) return fa[x];
	int y=fa[x];
	fa[x]=find(fa[x]);
	d[x]+=d[y];
	return fa[x];
}



int main()
{
	//freopen("input.txt","r",stdin);
	//freopen("output.txt","w",stdout);
	int R,C;scanf("%d%d",&R,&C);
	int n;scanf("%d",&n);
	for (int i=1;i<=n;i++) scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].z);
	sort(a+1,a+n+1);
	for (int i=1;i<=C;i++) fa[i]=i;
	for (int i=1;i<=C;i++) d[i]=0;
	int k=1;
	while (k<=n)
	{
		int j=k;
		while (j<=n&&a[j].x==a[k].x) j++;
		for (int i=k+1;i<j;i++)
		{
			int fx=find(a[k].y),fy=find(a[i].y);
			if (fx==fy)
			{
				if (d[a[k].y]-d[a[i].y]!=a[k].z-a[i].z) {puts("No");return 0;}
			}
			else
			{
				int w=d[a[k].y]+a[i].z-d[a[i].y]-a[k].z;
				if (w>0)
				{
					fa[fy]=fx;d[fy]=w;
				}
				else
				{
					fa[fx]=fy;d[fx]=-w;
				}
			}
		}
		k=j;
	}
	for (int i=1;i<=n;i++)
	{
		find(a[i].y);
		if (d[a[i].y]>a[i].z) {puts("No");return 0;}
	}
	swap(R,C);
	for (int i=1;i<=n;i++) swap(a[i].x,a[i].y);
	sort(a+1,a+n+1);
	for (int i=1;i<=C;i++) fa[i]=i;
	for (int i=1;i<=C;i++) d[i]=0;
	k=1;
	while (k<=n)
	{
		int j=k;
		while (j<=n&&a[j].x==a[k].x) j++;
		for (int i=k+1;i<j;i++)
		{
			int fx=find(a[k].y),fy=find(a[i].y);
			if (fx==fy)
			{
				if (d[a[k].y]-d[a[i].y]!=a[k].z-a[i].z) {puts("No");return 0;}
			}
			else
			{
				int w=d[a[k].y]+a[i].z-d[a[i].y]-a[k].z;
				if (w>0)
				{
					fa[fy]=fx;d[fy]=w;
				}
				else
				{
					fa[fx]=fy;d[fx]=-w;
				}
			}
		}
		k=j;
	}
	for (int i=1;i<=n;i++)
	{
		find(a[i].y);
		if (d[a[i].y]>a[i].z) {puts("No");return 0;}
	}
	puts("Yes");
	return 0;
}
