#include <bits/stdc++.h>
using namespace std;
const double PI = 4 * atan(1);
vector<complex<double> > w;
int N;
void initialize(int b) {
  N = 1;
  while (N < b) N = N << 1;
  N = N << 1;
  w.resize(N);
  double an1 = 2 * PI / N, an = 0;
  for (int i = 0; i < N; i++, an += an1)
    w[i] = complex<double>(cos(an), sin(an));
}
void fft(vector<complex<double> > &A) {
  int n, l, i, j, x, s, a, b, F, f;
  complex<double> u, t;
  n = A.size();
  for (i = 0; i < n; i++) {
    j = 0, s = i;
    for (x = 1; x < n; x <<= 1) j = j << 1 | (s & 1), s >>= 1;
    if (j > i) swap(A[i], A[j]);
  }
  for (l = 2; l <= n; l <<= 1) {
    F = N / l;
    for (i = 0; i < n; i += l) {
      f = 0;
      for (j = 0; j < (l >> 1); j++, f += F) {
        a = i + j, b = i + j + (l >> 1);
        t = w[f] * A[b];
        u = A[a];
        A[a] = u + t;
        A[b] = u - t;
      }
    }
  }
}
void multiply(vector<int> &a, vector<int> &c) {
  int n, m, p;
  vector<complex<double> > fa(a.begin(), a.end());
  m = 2 * a.size();
  p = m - 1;
  for (n = 1; n < m; n <<= 1)
    ;
  fa.resize(n);
  fft(fa);
  for (int i = 0; i < n; i++) fa[i] = conj(fa[i] * fa[i]);
  fft(fa);
  c.resize(p);
  for (int i = 0; i < p; i++) c[i] = (long long)(fa[i].real() / n + 0.5);
}
int main() {
  int n, m, i, j, k;
  bool f = 1;
  scanf("%d%d", &n, &m);
  initialize(m);
  vector<int> a;
  a.resize(m + 1);
  while (n--) {
    scanf("%d", &i);
    a[i] = 1;
  }
  vector<int> c;
  multiply(a, c);
  for (i = 1, k = 0; i < m + 1 && f == 1; i++) {
    if (c[i] == 0)
      if (a[i] == 1)
        k++;
      else
        ;
    else if (a[i] == 1)
      a[i] = 0;
    else
      f = 0;
  }
  if (f == 1) {
    printf("YES\n%d\n", k);
    for (i = 1; i < m + 1; i++)
      if (a[i]) printf("%d ", i);
    printf("\n");
  } else
    printf("NO\n");
  return 0;
}
