#include <bits/stdc++.h>
const int N = 1050000;
const double pi = acos(-1.0);
int a[N], ans[N], rev[N << 1];
struct C {
  double x, y;
  C() {}
  C(double xx, double yy) : x(xx), y(yy) {}
  C operator+(const C &b) { return C(x + b.x, y + b.y); }
  C operator-(const C &b) { return C(x - b.x, y - b.y); }
  C operator*(const C &b) { return C(x * b.x - y * b.y, x * b.y + y * b.x); }
  void operator/=(const int &b) {
    x /= b;
    y /= b;
  }
} b[N << 1];
void FFT(C *a, int n, int f) {
  for (int i = 0; i < n; i++)
    if (i < rev[i]) std::swap(a[i], a[rev[i]]);
  for (int i = 1; i < n; i <<= 1) {
    C wn = C(cos(pi / i), f * sin(pi / i));
    for (int j = 0; j < n; j += i << 1) {
      C w = C(1, 0);
      for (int k = 0; k < i; k++, w = w * wn) {
        C x = a[j + k], y = w * a[j + k + i];
        a[j + k] = x + y;
        a[j + k + i] = x - y;
      }
    }
  }
  if (f == -1)
    for (int i = 0; i < n; i++) a[i] /= n;
}
int main() {
  int n, m;
  scanf("%d%d\n", &n, &m);
  for (int i = 1; i <= n; i++) {
    int x;
    scanf("%d", &x);
    a[x] = 1;
    b[x] = C(1, 0);
  }
  int len = 0, L = 1;
  for (; L <= m * 2; len++) L <<= 1;
  for (int i = 0; i < L; i++)
    rev[i] = rev[i >> 1] >> 1 ^ ((i & 1) << (len - 1));
  FFT(b, L, 1);
  for (int i = 0; i < L; i++) b[i] = b[i] * b[i];
  FFT(b, L, -1);
  int k = 0;
  for (int i = 1; i <= m; i++)
    if (!a[i] && b[i].x >= 0.5) {
      printf("NO\n");
      return 0;
    } else if (a[i] && b[i].x < 0.5)
      ans[++k] = i;
  printf("YES\n%d\n", k);
  for (int i = 1; i <= k; i++) printf("%d ", ans[i]);
}
