#include <bits/stdc++.h>
using namespace std;
const int N = 3e6 + 10;
const double pi = acos(-1);
int n, m, k;
int r[N];
int a, b;
complex<double> A[N], B[N];
int c[N], p[N], ans[N];
void FFT(complex<double> A[], int n, int inv) {
  for (int i = 0; i < n; ++i) {
    if (i < r[i]) swap(A[i], A[r[i]]);
  }
  for (int mid = 1; mid < n; mid <<= 1) {
    complex<double> wn = complex<double>(cos(pi / mid), inv * sin(pi / mid));
    for (int i = 0; i < n; i += mid * 2) {
      complex<double> w(1, 0);
      for (int k = 0; k < mid; ++k, w *= wn) {
        complex<double> x = A[i + k], y = w * A[i + k + mid];
        A[i + k] = x + y;
        A[i + k + mid] = x - y;
      }
    }
  }
  if (inv == -1) {
    for (int i = 0; i < n; ++i) {
      A[i] /= n;
    }
  }
}
int main() {
  int d, Q;
  cin >> d >> Q;
  for (int i = 1; i <= d; ++i) {
    int y;
    scanf("%d", &y);
    p[y]++;
    ans[y]++;
  }
  for (int i = 0; i <= Q; ++i)
    if (p[i]) {
      A[i].real(1);
    }
  a = b = Q;
  m = a + b + 1;
  int bit = 0;
  while ((1 << bit) < m) bit++;
  n = (1 << bit);
  for (int i = 0; i < n; ++i) r[i] = (r[i >> 1] >> 1) | ((i & 1) << (bit - 1));
  FFT(A, n, 1);
  for (int i = 0; i < n; ++i) A[i] = A[i] * A[i];
  FFT(A, n, -1);
  for (int i = 1; i <= Q; ++i) {
    long long t = A[i].real() + 0.49;
    if (t >= 1) {
      if (p[i] == 0) {
        cout << "NO" << endl;
        return 0;
      }
      ans[i] = 0;
    }
  }
  cout << "YES" << endl;
  int sum = 0;
  for (int i = 1; i <= Q; ++i)
    if (ans[i]) sum++;
  cout << sum << endl;
  for (int i = 1; i <= Q; ++i)
    if (ans[i]) printf("%d ", i);
  return 0;
}
