#include<bits/stdc++.h>
using namespace std;
int n , m , a[300000] , f[300000] , x , id , err[300000] , wro[300000] , cnt , flag;
vector< int > vec[300000];
bool solve( int num , int pl )
{
	int e = 0 , wr[5] , cnt = 0 , fix[5] , l[5];
	for(int i = 1 ; i <= m ; i++ )
		if(a[i] != vec[pl][i]) wr[++e] = i;
	for(int i = 1 ; i < (1 << e) ; i++ )
	{
		int qwq = __builtin_popcount(i); cnt = flag = 0;
		if(qwq + num > 2 || e - qwq > 2) continue;
		for(int j = 0 ; j < e ; j++ )
		{
			if((i & (1 << j)) && f[wr[j + 1]]) 
			{
				flag = 1;
				break;
			}
		}
		if(flag) continue;
//		cerr << i << endl;
		for(int j = 0 ; j < e ; j++ )
		{
			if(i & (1 << j))
			{
				l[++cnt] = a[wr[j + 1]] , f[wr[j + 1]] = 1;
				a[wr[j + 1]] = vec[pl][wr[j + 1]] , fix[cnt] = wr[j + 1];
			}
		}
		for(int j = 2 ; j <= n ; j++ )
		{
			int tot = 0;
			for(int k = 1 ; k <= m ; k++ ) tot += (vec[j][k] != a[k]);
			if(tot > 2) 
			{
				if(qwq + num < 2)
					if(solve(qwq + num , j)) return 1;
				flag = 1;
				break;
			}
		}
		if(!flag)
		{
			printf("Yes\n");
			for(int j = 1 ; j <= m ; j++ ) printf("%d " , a[j]);
			return 1;
		}
		for(int j = 1 ; j <= cnt ; j++ ) a[fix[j]] = l[j] , f[fix[j]] = 0;
	}
	return 0;
}
int main()
{
	scanf("%d%d" , &n , &m);
	for(int i = 1 ; i <= n ; i++ )
	{
		vec[i].push_back(0);
		for(int j = 1 ; j <= m ; j++ ) scanf("%d" , &x) , vec[i].push_back(x);
	}
	for(int i = 1 ; i <= m ; i++ ) a[i] = vec[1][i];
	for(int i = 2 ; i <= n ; i++ )
	{
		for(int j = 1 ; j <= m ; j++ ) 
			if(vec[i][j] != vec[1][j]) err[i]++;
		if(err[id] < err[i]) id = i;
	}
	if(err[id] >= 5)
	{
		printf("No");
		return 0;
	}
	if(err[id] <= 2)
	{
		printf("Yes\n");
		for(int i = 1 ; i <= m ; i++ ) printf("%d " , vec[1][i]);
		return 0;
	}
	if(!solve(0 , id)) printf("No");
	return 0;
}
/*
5 5
185202051 546644673 256604854 809788696 204113467
757748286 49086372 256604854 809788696 666765043
185202051 361984662 256604854 909233087 841008011
185202051 372891934 256604854 809788696 928119866
185202051 361984662 290067511 809788696 581607532
*/
