#include <bits/stdc++.h>
using namespace std;
long long n, m;
long long init[200][200], w[200][200];
long long a[200], b[200];
long long gcd(long long x, long long y) {
  while (x != 0 && y != 0) {
    (x > y) ? (x %= y) : (y %= x);
  }
  return x + y;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin >> n >> m;
  long long mx = 0;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      cin >> init[i][j];
      mx = max(mx, init[i][j]);
    }
  }
  for (int j = 0; j < m; j++) {
    b[j] = init[0][j];
  }
  a[0] = 0;
  for (int i = 1; i < n; i++) {
    a[i] = init[i][0] - b[0];
  }
  bool flag = true;
  long long g = 0;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      w[i][j] = abs(a[i] + b[j] - init[i][j]);
      if (w[i][j] != 0) flag = false;
      g = gcd(g, w[i][j]);
    }
  }
  long long k;
  if (flag) {
    cout << "YES" << '\n';
    if (mx == 0) {
      k = 1000;
    } else {
      k = 2 * mx;
    }
    cout << k << '\n';
    for (int i = 0; i < n; i++) {
      cout << (a[i] + k) % k << ' ';
    }
    cout << '\n';
    for (int j = 0; j < m; j++) {
      cout << (b[j] + k) % k << ' ';
    }
    return 0;
  } else {
    if (g >= mx && g != 0) {
      for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
          if ((a[i] + b[j] + 10 * g) % g != init[i][j]) {
            cout << "NO";
            return 0;
          }
        }
      }
      cout << "YES" << '\n';
      cout << g << '\n';
      for (int i = 0; i < n; i++) {
        cout << (a[i] + 10 * g) % g << ' ';
      }
      cout << '\n';
      for (int j = 0; j < m; j++) {
        cout << (b[j] + 10 * g) % g << ' ';
      }
      return 0;
    }
  }
  cout << "NO";
}
