#include <bits/stdc++.h>
using namespace std;
const double pi = acos(-1.0);
const double eps = 1e-5;
const int MAX = 1 << 21;
const complex<double> I(0, 1.);
void fft(complex<double> f[], int n, bool inv) {
  double th = 2. * pi / n;
  if (inv) th = -th;
  for (int m = n; m >= 2; m >>= 1) {
    int mh = m >> 1;
    for (int i = (0); i < int(mh); i++) {
      complex<double> w = exp(i * th * I);
      for (int j = i; j < n; j += m) {
        int k = j + mh;
        complex<double> x = f[j] - f[k];
        f[j] += f[k];
        f[k] = w * x;
      }
    }
    th *= 2;
  }
  int i = 0;
  for (int j = (1); j < int(n - 1); j++) {
    for (int k = n >> 1; k > (i ^= k); k >>= 1)
      ;
    if (j < i) swap(f[i], f[j]);
  }
}
int a[MAX], n, m;
complex<double> b[MAX];
vector<int> ans;
void solve() {
  int N = 1, M = m + 1;
  while (N < 2 * M) N <<= 1;
  fft(b, N, 0);
  for (int i = (0); i < int(N); i++) b[i] *= b[i];
  fft(b, N, 1);
  for (int i = (0); i < int(N); i++) b[i] /= N;
  for (int i = (0); i < int(M); i++) {
    if (!a[i] and (b[i].real() > 1 - eps)) {
      puts("NO");
      return;
    }
    if (a[i] and (b[i].real() < eps)) ans.push_back(i);
  }
  puts("YES");
  cout << ans.size() << endl;
  for (int i = (0); i < int((int)ans.size()); i++) cout << ans[i] << " ";
  cout << endl;
}
void input() {
  cin >> n >> m;
  for (int i = (0); i < int(n); i++) {
    int x;
    cin >> x;
    a[x] = 1;
    b[x] = complex<double>(1., 0);
  }
}
int main() {
  input();
  solve();
  return 0;
}
