#include<bits/stdc++.h>
using namespace std;
#define N 250005
int n,m,pos,cnt[16] = {0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4};
vector<int>val[N],ans,tmp,sk;
 
bool find(int op)
{
	for(int i = 2;i <= n;++i) {
	 	int num = 0;
		for(int j = 1;j <= m;++j) num += (ans[j] != val[i][j]);
		
		if(num > 2 + op) {
			pos = i;
			return false;
		}
		else if(num > 2) {
			for(int j = 1;j <= m;++j)
				if(ans[j] != val[i][j]) {
					ans[j] = val[i][j];
					if(find(0) == true) return true;
					ans[j] = tmp[j];
				}
			return false;
		}
	}
	return true;
}
 
bool work()
{
	tmp = ans = val[1];
	if(find(0) == true) return true;
	
	sk.clear();
	for(int j = 1;j <= m;++j)
		if(ans[j] != val[pos][j]) sk.push_back(j);
		
	if(sk.size() > 4) return false;
	
	int len = sk.size(),t = pos;
	for(int i = 0;i < (1 << len);++i)
		if(cnt[i] <= 2 && (sk.size() - cnt[i]) <= 2){
			for(int j = 0;j < len;++j)
				if((i >> j) & 1) tmp[sk[j]] = ans[sk[j]] = val[t][sk[j]];
			if(find(cnt[i] < 2) == true) return true;
			for(int j = 0;j < len;++j)
				if((i >> j) & 1) tmp[sk[j]] = ans[sk[j]] = val[1][sk[j]];
		}
	return false;
}
 
int main()
{
	cin>>n>>m;
	ans.resize(m + 1);
	for(int i = 1;i <= n;++i) {
		val[i].resize(m + 1);
		for(int j = 1;j <= m;++j) cin>>val[i][j];
	}
	
	if(work() == true) {
		cout<<"Yes"<<endl;
		for(int j = 1;j <= m;++j) cout<<ans[j]<<" ";
	}
	else cout<<"No"<<endl;
	
	return 0;
}
