#include <bits/stdc++.h>
using namespace std;
const double pi = acos(-1.0);
const int N = 5000000;
const double eps = 1e-6;
int n, l, m, k, a[N], rev[N], res[N];
bool used[N];
complex<double> b[N], tmp[N];
pair<int, int> p[N];
vector<int> ans;
void fft(bool invert) {
  for (int i = 0; i < l; i++) tmp[rev[i]] = b[i];
  for (int i = 0; i < l; i++) b[i] = tmp[i];
  for (int r = 1; r <= k; r++) {
    for (int i = 0; i < l; i += (1 << r)) {
      for (int j = i; j < i + (1 << (r - 1)); j++) {
        double ang;
        if (!invert)
          ang = 2.0 * (j - i) * pi / (1 << r);
        else
          ang = -2.0 * (j - i) * pi / (1 << r);
        complex<double> w(cos(ang), sin(ang));
        complex<double> t1 = b[j], t2 = b[j + (1 << (r - 1))];
        b[j] = t1 + w * t2;
        b[j + (1 << (r - 1))] = t1 - w * t2;
      }
    }
  }
  if (invert) {
    for (int i = 0; i < l; i++) b[i] /= l;
  }
}
int main() {
  scanf("%d%d", &n, &m);
  memset(used, false, sizeof(used));
  for (int i = 0; i < n; i++) scanf("%d", &a[i]);
  for (int i = 0; i < n; i++) used[a[i]] = true;
  m++;
  l = 1;
  k = 0;
  for (int i = 1; i <= 20; i++)
    if (l < m) {
      l *= 2;
      k++;
    } else
      break;
  l *= 2;
  k++;
  for (int i = 0; i < n; i++) b[a[i]] = complex<double>(1, 0);
  for (int i = 0; i < l; i++) {
    int mask = 0;
    for (int j = 0; j < k; j++)
      if (i & (1 << j)) mask |= 1 << (k - j - 1);
    rev[i] = mask;
  }
  fft(0);
  for (int i = 0; i < l; i++) b[i] *= b[i];
  fft(1);
  for (int i = 0; i < l; i++) res[i] = b[i].real() + 0.5;
  for (int i = 1; i < m; i++) {
    if ((!res[i]) && (used[i]))
      ans.push_back(i);
    else if ((res[i]) && (!used[i])) {
      cout << "NO";
      return 0;
    }
  }
  cout << "YES" << endl;
  printf("%d\n", ans.size());
  for (int i = 0; i < ans.size(); i++) printf("%d ", ans[i]);
  return 0;
}
