#include <bits/stdc++.h>
using namespace std;


//#define int long long 

vector <int> calc(vector <int> a, vector <int> b) {
    vector <int> c;
    for(int i = 0; i < a.size(); i++) if(a[i] ^ b[i])
        c.push_back(i);
    return c;
}

template <typename T> void print(vector <T> &v) {
    for(int i = 0; i < v.size(); ++i) 
        cout << v[i] << " \n"[i + 1 == v.size()];
}

int32_t main() {
    ios_base :: sync_with_stdio(0); cin.tie(0); cout.tie(0);
    
    int n, m; cin >> n >> m;

    vector <vector <int> > a(n, vector <int> (m));
    for(auto &x: a) for(auto &y: x) cin >> y;

    int mx = 0, id = 0;

    for(int i = 0; i < n; i++) {
        int k = calc(a[i], a[0]).size();
        if(mx < k) {
            mx = k;
            id = i;
        }
    }

    if(mx >= 5) {
        cout << "No" << endl;
        return 0;
    }

    if(mx <= 2) {
        cout << "Yes" << endl;
        print(a[0]);
        return 0;
    }

    auto d = calc(a[0], a[id]);

    if(mx == 3) {
        for(int p: d) for(int q: d) if(p ^ q) {
            
            auto ans = a[0];
            ans[p] = a[id][p];

            for(auto v: a) {
                auto dx = calc(ans, v);
                if(dx.size() >= 3 or (dx.size() == 2 && find(dx.begin(), d.end(), q) == dx.end())) 
                    ans[q] = v[q];
            }
            
            int t = 0;

            for(auto v: a) 
                t = max(t, (int)calc(v, ans).size());

            if(t <= 2) {
                cout << "Yes" << endl;
                print(ans);
                return 0;
            }
        }
        cout << "No" << endl;
        return 0;
    }
    

    for(int p: d) for(int q: d) if(p < q) {
        auto ans = a[0];

        ans[p] = a[id][p];
        ans[q] = a[id][q];

        int t = 0;

        for(auto v: a) 
            t = max(t, (int)calc(v, ans).size());

        if(t <= 2) {
            cout << "Yes" << endl;
            print(ans);
            return 0;
        }
        
    }
    cout << "No" << endl;


    
}