#include <bits/stdc++.h>
using namespace std;
const int INF = ((long long)1E9 + 7);
template <class C>
void mini(C &a, C b) {
  a = min(a, b);
}
template <class C>
void maxi(C &a, C b) {
  a = max(a, b);
}
const unsigned P = 2013265921;
const unsigned ROOT = 440564289;
const int MN = 21;
unsigned omega[1 << MN];
unsigned pw(unsigned x, unsigned n) {
  unsigned res = 1;
  while (n) {
    if (n & 1) res = (unsigned long long)res * x % P;
    x = (unsigned long long)x * x % P;
    n >>= 1;
  }
  return res;
}
void fft(vector<unsigned> &a, int n, bool inverse = false) {
  int N = 1 << n;
  a.insert(a.end(), N - ((int)(a).size()), 0);
  unsigned root = pw(ROOT, (1 << 27) / N * (inverse ? (N - 1) : 1));
  omega[0] = 1;
  for (int i = (1); i <= (N - 1); ++i)
    omega[i] = (unsigned long long)omega[i - 1] * root % P;
  for (int i = 0; i < (n); ++i) {
    for (int j = 0; j < (1 << i); ++j) {
      for (int k = 0; k < (1 << (n - i - 1)); ++k) {
        int s = (j << (n - i)) + k;
        int t = s + (1 << (n - i - 1));
        unsigned w = omega[k << i];
        unsigned temp = a[s] + a[t];
        if (temp >= P) temp -= P;
        unsigned t2 = a[s] - a[t] + P;
        a[t] = (unsigned long long)w * t2 % P;
        a[s] = temp;
      }
    }
  }
  for (int i = 0; i < (N); ++i) {
    int x = i, y = 0;
    for (int j = 0; j < (n); ++j) y = (y << 1) + (x & 1), x >>= 1;
    if (i < y) swap(a[i], a[y]);
  }
  if (inverse) {
    unsigned inv = pw(N, P - 2);
    for (int i = 0; i < (N); ++i) a[i] = (unsigned long long)a[i] * inv % P;
  }
}
vector<unsigned> conv(vector<unsigned> A, vector<unsigned> B) {
  int n = 31 - __builtin_clz(2 * (((int)(A).size()) + ((int)(B).size())) - 1);
  fft(A, n);
  fft(B, n);
  for (int i = 0; i < ((1 << n)); ++i)
    A[i] = (unsigned long long)A[i] * B[i] % P;
  fft(A, n, true);
  return A;
}
vector<unsigned> square(vector<unsigned> A) {
  int n = 32 - __builtin_clz(2 * ((int)(A).size()) - 1);
  fft(A, n);
  for (int i = 0; i < ((1 << n)); ++i)
    A[i] = (unsigned long long)A[i] * A[i] % P;
  fft(A, n, true);
  return A;
}
int main() {
  ios_base::sync_with_stdio(false);
  int n, m;
  scanf("%d%d", &n, &m);
  vector<unsigned> A(m + 1);
  for (int i = 0; i < (n); ++i) {
    int a;
    scanf("%d", &a);
    A[a] = 1;
  }
  vector<unsigned> B = square(A);
  int cnt = 0;
  for (int i = 0; i < (m + 1); ++i) {
    if (B[i] > 0 && A[i] == 0) {
      printf("NO\n");
      return 0;
    }
    if (B[i] == 0 && A[i] == 1) {
      ++cnt;
    }
  }
  printf("YES\n%d\n", cnt);
  for (int i = 0; i < (m + 1); ++i) {
    if (B[i] == 0 && A[i] == 1) {
      printf("%d ", i);
    }
  }
  printf("\n");
  return 0;
}
