#include<iostream>
#include<map>
#include<vector>

using namespace std;

int main()
{
	int n, m;
	cin >> n >> m;
	vector<vector<int>> a;
	for (int i = 0; i < n; i++)
	{
		vector<int> input;
		for (int j = 0; j < m; j++)
		{
			int c;
			cin >> c;
			input.push_back(c);
		}
		a.push_back(input);
	}
	int ans[200005];
	int getpos = -1;
	map<int, int> num;
	vector<int> dif;
	num.clear();
	for (int i = 1; i < n; i++)
	{
		int cnt = 0;
		for (int j = 0; j < m; j++)
		{
			if (a[i][j] != a[0][j])
			{
				cnt++;
			}
		}
			if (cnt >= 5)
			{
				getpos = -2;
				break;
			}
			else if (cnt > 2)
			{
				getpos = i;
				for (int j = 0; j < m; j++)
				{
					if (a[i][j] != a[0][j])
					{
						dif.push_back(j);
					}
				}
				break;
			}
	}
	if (getpos == -2)
	{
		cout << "NO";
	}
	else if (getpos == -1)
	{
		cout << "YES" << endl;
		for (int i = 0; i < m; i++)
		{
			cout << a[0][i] << " ";
		}
	}
	else
	{
		bool ok = false;
		for (int i = 0; i < m; i++)
		{
			ans[i] = a[0][i];
		}
		for (int i : dif)
		{
			ans[i] = 0;
		}
		for (int i = 0; i < n; i++)
		{
			num[i] = 0;
			for (int j = 0; j < m; j++)
			{
				if (a[i][j] != ans[j])
				{
					num[i]++;
				}
			}
			num[i] -= dif.size();
		}
		if (dif.size() == 4)
		{
			for (int bot1 = 0; bot1 < dif.size()-1; bot1++)
			{
				for (int bot2 = bot1 + 1; bot2 < dif.size(); bot2++)
				{
					bool check = true;
					for (int i = 0; i < n; i++)
					{
						int cntdif = 0;
						for (int k : dif)
						{
							if (k == dif[bot1] || k == dif[bot2])
							{
								if (a[i][k] != a[getpos][k])
								{
									cntdif++;
								}
							}
							else
							{
								if (a[i][k] != a[0][k])
								{
									cntdif++;
								}
							}
						}
						if (cntdif + num[i] > 2)
						{
							check = false;
							break;
						}
					}
					if (check)
					{
						ok=true;
						for (int k : dif)
						{
							if (k == dif[bot1] || k == dif[bot2])
							{
								ans[k] = a[getpos][k];
							}
							else
							{
								ans[k] = a[0][k];
							}
						}
						break;
					}
				}
				if (ok)
				{
					break;
				}
			}
		}
		else if (dif.size() == 3)
		{
			for (int top :dif)
			{
				for (int bot :dif)
				{
					if (top != bot)
					{
						bool check = true;
						int valmid=-1;
						for (int i = 0; i < n; i++)
						{
							if (valmid == -1)
							{
								if (num[i] > 2)
								{
									check = false;
								}
								else if (num[i] == 2)
								{
									if (a[i][top] != a[0][top] || a[i][bot] != a[getpos][bot])
									{
										check = false;
									}
									else {
										for (int mid : dif)
										{
											if (mid != bot && mid != top)
											{
												valmid = a[i][mid];
											}
										}
									}
								}
								else if (num[i] == 1)
								{
									if (a[i][top] != a[0][top] || a[i][bot] != a[getpos][bot])
									{
										if (a[i][top] != a[0][top] && a[i][bot] != a[getpos][bot])
										{
											check = false;
										}
										else
										{
											for (int mid : dif)
											{
												if (mid != bot && mid != top)
												{
													valmid = a[i][mid];
												}
											}
										}
									}
								}
								else if (num[i] == 0)
								{
									if (a[i][top] != a[0][top] && a[i][bot] != a[getpos][bot])
									{
										for (int mid : dif)
										{
											if (mid != bot && mid != top)
											{
												valmid = a[i][mid];
											}
										}
									}
								}
							}
							else {
								if (num[i] > 2)
								{
									check = false;
								}
								else if (num[i] == 2)
								{
									if (a[0][top] != a[i][top] || a[getpos][bot] != a[i][bot])
									{
										check = false;
									}
									else {
										for (int mid : dif)
										{
											if (mid != bot && mid != top)
											{
												if (a[i][mid] != valmid)
												{
													check = false;
												}
											}
										}
									}
								}
								else if (num[i] == 1)
								{
									int midd;
									for (int mid : dif)
									{
										if (mid != bot && mid != top)
										{
											midd = mid;
										}
									}
									if ((a[0][top] != a[i][top] || a[getpos][bot] != a[i][bot]) && a[i][midd] != valmid)
									{
										check = false;
									}
								}
								else if (num[i] == 0)
								{
									int midd;
									for (int mid : dif)
									{
										if (mid != bot && mid != top)
										{
											midd = mid;
										}
									}
									if (a[0][top] != a[i][top] && a[getpos][bot] != a[i][bot] && a[i][midd] != valmid)
									{
										check = false;
									}
								}
							}
							if (!check)
							{
								break;
							}
						}
						if (check)
						{
							ok = true;
							for (int mid : dif)
							{
								if (mid != bot && mid != top)
								{
									if (valmid == -1)
									{
										ans[mid] = a[0][mid];
									}
									else
									{
										ans[mid] = valmid;
									}
								}
							}
							ans[top] = a[0][top];
							ans[bot] = a[getpos][bot];
						}
					}
					if (ok)
					{
						break;
					}
				}
				if (ok)
				{
					break;
				}
			}
		}
		if (ok)
		{
			cout << "YES"<<endl;
			for (int i = 0; i < m; i++)
			{
				cout << ans[i] << " ";
			}
		}
		else
		{
			cout << "NO";
		}
	}
	
	return 0;

}