#include <bits/stdc++.h>
using namespace std;
void bug() { cout << " " << endl; }
template <class T>
void bug(T a) {
  cout << a << "  ";
}
template <class T>
void bug(T* a, int n) {
  for (int i = 0; i < (n); i++) bug(a[i]);
}
const double pi = acos(-1.0);
int flip(int n, int i) {
  int n2 = n, ans = 0;
  for (; n2 > 1; n2 >>= 1, i >>= 1) ans = (ans << 1) | (i & 1);
  return ans;
}
vector<complex<double> > FFT(vector<complex<double> > buf, int t) {
  int n = buf.size();
  vector<complex<double> > v(n);
  for (int i = 0; i < n; i++) v[i] = buf[flip(n, i)];
  for (int m = 2; m <= n; m *= 2) {
    complex<double> w = polar(1.0, 2 * pi * t / m);
    for (int i = 0; i < n; i += m) {
      complex<double> now(1.0, 0);
      for (int j = 0; 2 * j < m; j++) {
        complex<double> x = v[i + j];
        complex<double> y = now * v[i + j + m / 2];
        v[i + j] = x + y;
        v[i + j + m / 2] = x - y;
        now *= w;
      }
    }
  }
  return v;
}
int n, m;
int ok[1111111];
int main() {
  ios::sync_with_stdio(false);
  cin >> n >> m;
  for (int i = 0; i < (n); i++) {
    int x;
    cin >> x;
    ok[x] = 1;
  }
  vector<complex<double> > coef, prod;
  int l = m * 2 + 10;
  while (((l) & (-(l))) != l) l++;
  for (int i = 0; i < (m + 1); i++) coef.push_back(complex<double>(ok[i], 0));
  for (int i = m + 1; i < l; i++) coef.push_back(complex<double>(0, 0));
  prod = FFT(coef, 1);
  for (int i = 0; i < (l); i++) prod[i] *= prod[i];
  prod = FFT(prod, -1);
  for (int i = 0; i < (m + 1); i++)
    if (prod[i].real() / l > 1e-3 && ok[i] == 0) {
      cout << "NO" << endl;
      exit(0);
    }
  vector<int> ans;
  for (int i = 0; i < (m + 1); i++)
    if (prod[i].real() / l < 1e-3 && ok[i] == 1) ans.push_back(i);
  cout << "YES" << endl;
  cout << ans.size() << endl;
  for (int i = 0; i < (ans.size()); i++) cout << ans[i] << " ";
  return 0;
}
