#include <bits/stdc++.h>
#pragma GCC optimaze("Ofast");
#pragma GCC optimize("unroll-loops")
using namespace std;
const long double pi = acos(-1);
const int maxn = (1 << 22) + 113;
int rev[maxn];
complex<double> w[maxn];
int logd(int n) {
  int lg = 0;
  while ((1 << lg) < n) lg++;
  return lg;
}
void precalc(int n) {
  int lg = logd(n);
  int last = 0;
  for (int i = 1; i < n; i++) {
    if (i == (2 << last)) last++;
    rev[i] = rev[i ^ (1 << last)] | (1 << (lg - (last + 1)));
  }
  for (int i = 0; i < n; i++)
    w[i] = complex<double>(cos(2 * i * pi / n), sin(2 * i * pi / n));
}
void fft(vector<complex<double> > &a, int n) {
  int lg = logd(n);
  for (int i = 0; i < n; i++)
    if (i < rev[i]) swap(a[i], a[rev[i]]);
  for (int lvl = 0; lvl < lg; lvl++) {
    int len = (1 << lvl);
    for (int sd = 0; sd < n; sd += 2 * len) {
      for (int i = 0; i < len; i++) {
        complex<double> first = a[i + sd];
        complex<double> second = a[i + sd + len] * w[i << (lg - (lvl + 1))];
        a[i + sd] = first + second;
        a[i + sd + len] = first - second;
      }
    }
  }
}
void inv_fft(vector<complex<double> > &a, int n) {
  fft(a, n);
  for (int i = 0; i < n; i++) a[i] /= n;
  reverse(a.begin() + 1, a.end());
}
void multiply(vector<int> &a, vector<int> &b, vector<int> &res) {
  int lg = logd(max(a.size(), b.size()));
  int n = (2 << lg);
  vector<complex<double> > fa(a.begin(), a.end()), fb(b.begin(), b.end());
  fa.resize(n), fb.resize(n);
  precalc(n);
  fft(fa, n);
  fft(fb, n);
  for (int i = 0; i < n; i++) fa[i] *= fb[i];
  inv_fft(fa, n);
  res.resize(n);
  for (int i = 0; i < n; i++) res[i] = int(fa[i].real() + 0.5);
}
signed main() {
  srand(1);
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.setf(ios::fixed);
  cout.precision(10);
  int n, m;
  cin >> n >> m;
  vector<int> te(m + 1, 0);
  for (int i = 0; i < n; i++) {
    int a;
    cin >> a;
    te[a]++;
  }
  vector<int> qw;
  multiply(te, te, qw);
  vector<int> ans;
  for (int i = 1; i <= m; i++) {
    if (te[i] == 0 && qw[i] != 0) {
      cout << "NO";
      return 0;
    }
    if (te[i] == 1 && qw[i] == 0) ans.push_back(i);
  }
  cout << "YES\n";
  cout << ans.size() << "\n";
  for (int i = 0; i < ans.size(); i++) cout << ans[i] << " ";
}
