#include <bits/stdc++.h>
int rd() {
  int k = 0;
  char c = getchar();
  while (c > '9' || c < '0') c = getchar();
  while (c >= '0' && c <= '9') k = k * 10 + c - '0', c = getchar();
  return k;
}
const double pi = acos(-1.0);
const int N = 2100001;
struct Com {
  double x, y;
  Com(double a = 0, double b = 0) { x = a, y = b; }
} x[N], p;
Com operator+(Com a, Com b) { return Com(a.x + b.x, a.y + b.y); }
Com operator-(Com a, Com b) { return Com(a.x - b.x, a.y - b.y); }
Com operator*(Com a, Com b) {
  return Com(a.x * b.x - a.y * b.y, a.x * b.y + a.y * b.x);
}
int n, m, l = 1, r[N], a[N], t;
bool f[N];
void FFT(int f) {
  for (int i = 0; i < l; ++i)
    if (i < r[i]) p = x[i], x[i] = x[r[i]], x[r[i]] = p;
  for (int i = 1; i < l; i <<= 1) {
    Com T(cos(pi / i), f * sin(pi / i));
    for (int j = 0; j < l; j += (i << 1)) {
      Com t(1, 0);
      for (int k = j; k < i + j; ++k, t = t * T)
        p = t * x[i + k], x[i + k] = x[k] - p, x[k] = x[k] + p;
    }
  }
}
int main() {
  t = n = rd(), m = rd();
  for (int i = 1; i <= n; ++i) a[i] = rd(), x[a[i]].x = f[a[i]] = 1;
  while (l <= m + m) l <<= 1;
  for (int i = 0; i < l; ++i) r[i] = (r[i >> 1] >> 1) | ((i & 1) ? l >> 1 : 0);
  FFT(1);
  for (int i = 0; i < l; ++i) x[i] = x[i] * x[i];
  FFT(-1);
  for (int i = 0; i <= m; ++i)
    if ((int)(x[i].x / l + 0.500001) > 0) {
      if (!f[i]) {
        puts("NO");
        return 0;
      }
      f[i] = 0, --t;
    }
  printf("YES\n%d\n", t);
  for (int i = 1; i <= m; ++i)
    if (f[i]) printf("%d ", i);
  puts("");
  return 0;
}
