#include <bits/stdc++.h>
using std::complex;
template <class K>
inline bool umax(K& a, K b) {
  return a < b ? a = b, true : false;
}
template <class K>
inline bool umin(K& a, K b) {
  return a > b ? a = b, true : false;
}
template <class K>
inline void read(K& x) {
  char c = getchar();
  K f = +1;
  for (x = 0; c < '0' || c > '9'; c = getchar())
    if (c == '-') f = -1;
  for (; c >= '0' && c <= '9'; c = getchar()) x = x * 10 + c - '0';
  x = x * f;
}
template <class K>
inline void write(K x) {
  static int fout[20], top;
  if (x < 0) putchar('-'), x = -x;
  do fout[top++] = x % 10, x /= 10;
  while (x);
  while (top) putchar(fout[--top] + '0');
}
int N, M;
const int maxN = 4e6;
int rev[maxN], a0[maxN], P[maxN], top;
complex<double> a[maxN];
void FFT(complex<double>* a, int n, int tp) {
  for (int i = 0; i < n; ++i)
    if (i < rev[i]) std::swap(a[i], a[rev[i]]);
  for (int k = 1; k < n; k <<= 1) {
    for (int i = 0; i < n; i += (k << 1)) {
      complex<double> wkj(cos(3.14159265358979 / k),
                          sin(tp * 3.14159265358979 / k)),
          w(1.0, 0.0);
      for (int j = 0; j < k; ++j) {
        complex<double> x = a[i + j];
        complex<double> y = a[i + j + k];
        a[i + j] = x + w * y;
        a[i + j + k] = x - w * y;
        w *= wkj;
      }
    }
  }
  if (tp == -1)
    for (int i = 0; i < n; ++i)
      a[i] = complex<double>(a[i].real() / n, a[i].imag());
}
int main() {
  if (fopen("input.txt", "r")) {
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
  }
  read(N);
  read(M);
  int L = 1, B = 0;
  for (int i = 1, t; i <= N; ++i) {
    read(t);
    a0[t] = 1;
    a[t] = 1;
  }
  while (L <= M * 2) L <<= 1, B++;
  for (int i = 1; i < L; ++i)
    rev[i] = (rev[i >> 1] >> 1) | ((i & 1) << (B - 1));
  FFT(a, L, +1);
  for (int i = 0; i < L; ++i) a[i] = a[i] * a[i];
  FFT(a, L, -1);
  for (int i = 0; i < M; ++i) {
    if (a0[i] == 0 && (int)(a[i].real() + 0.5) > 0) {
      puts("NO");
      return 0;
    }
    if (a0[i] == 1 && (int)(a[i].real() + 0.5) == 0) P[top++] = i;
  }
  puts("YES");
  write(top), putchar('\n');
  for (int i = 0; i < top; ++i) write(P[i]), putchar(' ');
  return 0;
}
