#include <bits/stdc++.h>
using namespace std;
const int inf = 1e9 + 1;
const int N = 1000123;
int z, n, m;
const int LOGN = 22;
vector<complex<double> > a, r, ya, yb, yt;
void fft(vector<complex<double> >& a, vector<complex<double> >& first, int n,
         int sign = 1, int p = 0, int s = 1, int q = 0) {
  if (n <= 1) {
    first[q] = a[p];
    return;
  }
  complex<double> en = exp(complex<double>(0, 2 * sign * acos(-1.0) / n));
  complex<double> e = 1;
  fft(a, first, n / 2, sign, p, s * 2, q);
  fft(a, first, n / 2, sign, p + s, s * 2, q + n / 2);
  for (int i = 0; i < n / 2; i++) {
    complex<double> t = e * first[q + n / 2 + i];
    yt[i] = first[q + i] + t;
    yt[i + n / 2] = first[q + i] - t;
    e *= en;
  }
  for (int i = 0; i < n; i++) first[q + i] = yt[i];
}
void multiply(vector<complex<double> >& a, vector<complex<double> >& b,
              vector<complex<double> >& res) {
  int n = 1;
  while (n < a.size() + b.size()) n <<= 1;
  a.resize(n);
  ya.resize(n);
  b.resize(n);
  yb.resize(n);
  yt.resize(n);
  res.resize(n);
  fft(a, ya, n);
  fft(b, yb, n);
  for (int i = 0; i < n; i++) ya[i] *= yb[i];
  fft(ya, yb, n, -1);
  int last = 0;
  for (int i = 0; i < n; i++) {
    res[i] = llroundl(real(yb[i]) / n);
    if (real(res[i])) last = i;
  }
  res.resize(last + 1);
}
int main() {
  ios_base::sync_with_stdio(0);
  cin >> n >> m;
  a.resize(m + 1);
  for (int i = 0; i < n; i++) {
    int t;
    cin >> t;
    a[t] = 1;
  }
  multiply(a, a, r);
  bool ok = true;
  vector<int> ans;
  for (int i = 1; i <= m; i++) {
    if (abs(a[i]) && !abs(r[i])) {
      ans.push_back(i);
    }
    if (!abs(a[i]) && abs(r[i])) ok = false;
  }
  if (!ok) {
    cout << "NO" << endl;
    return 0;
  }
  cout << "YES" << endl;
  cout << ans.size() << endl;
  for (int second : ans) {
    cout << second << " ";
  }
  cout << endl;
}
