#include <bits/stdc++.h>
using namespace std;
const double pi = acos(-1.0);
const double eps = 1e-5;
const int MAX = 1 << 21;
vector<complex<double> > fft(vector<complex<double> > f, bool inv) {
  int n, N = f.size();
  for (n = 0;; n++)
    if (N == (1 << n)) break;
  for (int m = (0); m < int(N); m++) {
    int m2 = 0;
    for (int i = (0); i < int(n); i++)
      if (m & (1 << i)) m2 |= (1 << (n - 1 - i));
    if (m < m2) swap(f[m], f[m2]);
  }
  for (int t = 1; t < N; t *= 2) {
    double theta = acos(-1.0) / t;
    complex<double> w(cos(theta), sin(theta));
    if (inv) w = complex<double>(cos(theta), -sin(theta));
    for (int i = 0; i < N; i += 2 * t) {
      complex<double> power(1.0, 0.0);
      for (int j = (0); j < int(t); j++) {
        complex<double> tmp1 = f[i + j] + f[i + t + j] * power;
        complex<double> tmp2 = f[i + j] - f[i + t + j] * power;
        f[i + j] = tmp1;
        f[i + t + j] = tmp2;
        power = power * w;
      }
    }
  }
  if (inv)
    for (int i = (0); i < int(N); i++) f[i] /= N;
  return f;
}
int a[MAX], n, m, N, M;
vector<complex<double> > b;
vector<int> ans;
void solve() {
  b = fft(b, 0);
  for (int i = (0); i < int(N); i++) b[i] *= b[i];
  b = fft(b, 1);
  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;
  N = 1;
  M = m + 1;
  while (N < 2 * M) N <<= 1;
  b.resize(N, complex<double>(0, 0));
  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;
}
