#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:512000000")
using namespace std;
template <class T>
inline T sqr(T x) {
  return x * x;
}
template <class T>
inline string tostr(const T &x) {
  stringstream ss;
  ss << x;
  return ss.str();
}
const double EPS = 1e-6;
const int INF = 1000 * 1000 * 1000;
const char CINF = 102;
const long long LINF = INF * 1ll * INF;
const long double PI = 3.1415926535897932384626433832795;
struct base {
  double a, b;
  base() {}
  base(double a, double b) : a(a), b(b) {}
  base operator+(const base &x) const { return base(a + x.a, b + x.b); }
  base operator-(const base &x) const { return base(a - x.a, b - x.b); }
  base operator*(const base &x) const {
    return base(a * x.a - b * x.b, a * x.b + b * x.a);
  }
  base operator/(double d) const { return base(a / d, b / d); }
};
const int lim = 1 << 21;
int src[lim + 100];
base ar[lim + 100];
void fft(bool invert) {
  int n = lim;
  for (int i = 1, j = 0; i < n; ++i) {
    int bit = n >> 1;
    for (; j >= bit; bit >>= 1) j -= bit;
    j += bit;
    if (i < j) swap(ar[i], ar[j]);
  }
  for (int len = 2; len <= n; len <<= 1) {
    double ang = 2 * PI / len * (invert ? -1 : 1);
    base wlen(cos(ang), sin(ang));
    for (int i = 0; i < n; i += len) {
      base w(1, 0);
      for (int j = 0; j < len / 2; ++j) {
        base u = ar[i + j], v = ar[i + j + len / 2] * w;
        ar[i + j] = u + v;
        ar[i + j + len / 2] = u - v;
        w = w * wlen;
      }
    }
  }
  if (invert)
    for (int i = 0; i < n; ++i) ar[i] = ar[i] / n;
}
void square() {
  fft(false);
  for (int i = 0; i < (lim); ++i) {
    ar[i] = ar[i] * ar[i];
  }
  fft(true);
}
int main() {
  int n, m;
  cin >> n >> m;
  for (int i = 0; i < (n); ++i) {
    int a;
    scanf("%d", &a);
    src[a] = 1;
    ar[a].a = 1;
  }
  for (int a = 0; a < (m + 1); ++a) {
    if (!src[a]) continue;
    for (int b = a + a; b <= m; b += a) {
      if (!src[b]) {
        cout << "NO";
        return 0;
      }
    }
  }
  square();
  vector<int> res;
  for (int a = 0; a < (m + 1); ++a) {
    bool t = fabs(ar[a].a) > .5;
    if (t) {
      if (!src[a]) {
        cout << "NO";
        return 0;
      }
    } else {
      if (src[a]) res.push_back(a);
    }
  }
  cout << "YES\n" << ((int)(res).size()) << '\n';
  for (int i = 0; i < (((int)(res).size())); ++i) {
    printf("%d ", res[i]);
  }
  return 0;
}
