#include <bits/stdc++.h>
using namespace std;
double PI = 3.141592653589793;
vector<complex<double> > duzywek;
vector<complex<double> > duzyret[50][2];
void szykuj() {
  for (int j = 0; j < 22; j++) {
    for (int i = 1; i <= (1 << (21 - j)); i++) {
      duzyret[j][0].push_back(0);
      if (j) duzyret[j][1].push_back(0);
    }
  }
}
int potenga(int v) {
  for (int i = 1; 1; i <<= 1) {
    if (i >= v) {
      return i;
    }
  }
}
void dft(int nn, int kt, int coile, complex<double> omega, int gdzie, int poz) {
  if (nn == 1) {
    duzyret[poz][gdzie][0] = duzywek[kt];
    return;
  }
  dft(nn >> 1, kt, coile << 1, omega * omega, 0, poz + 1);
  dft(nn >> 1, kt + coile, coile << 1, omega * omega, 1, poz + 1);
  complex<double> jeden(1.0, 0.0);
  int w = 0;
  int an = (nn >> 1) - 1;
  for (int i = 0; i < nn; i++) {
    duzyret[poz][gdzie][i] =
        duzyret[poz + 1][0][i & an] + jeden * duzyret[poz + 1][1][i & an];
    jeden *= omega;
  }
}
vector<int> fft(vector<int> jed, vector<int> dwa) {
  int n1 = potenga(jed.size() + dwa.size());
  while (jed.size() < n1) {
    jed.push_back(0);
  }
  while (dwa.size() < n1) {
    dwa.push_back(0);
  }
  complex<double> omega(cos(2.0 * PI / n1), sin(2.0 * PI / n1));
  vector<complex<double> > pam;
  duzywek.clear();
  for (int i = 0; i < n1; i++) {
    duzywek.push_back(complex<double>(jed[i], 0.0));
  }
  dft(n1, 0, 1, omega, 0, 0);
  pam = duzyret[0][0];
  for (int i = 0; i < n1; i++) {
    duzywek[i] = complex<double>(dwa[i], 0.0);
  }
  dft(n1, 0, 1, omega, 0, 0);
  for (int i = 0; i < n1; i++) {
    duzywek[i] = pam[i] * duzyret[0][0][i];
  }
  omega = (complex<double>(1.0, 0.0)) / omega;
  dft(n1, 0, 1, omega, 0, 0);
  vector<int> retret;
  int dowrzucenia;
  for (int i = 0; i < n1; i++) {
    duzyret[0][0][i] /= n1;
    dowrzucenia = round(duzyret[0][0][i].real());
    retret.push_back(dowrzucenia);
  }
  return retret;
}
int n, m;
vector<int> dopo;
vector<int> otrz;
vector<int> wyn;
int x;
int main() {
  szykuj();
  scanf("%d%d", &n, &m);
  while (dopo.size() <= m) {
    dopo.push_back(0);
  }
  dopo[0] = 1;
  for (int i = 1; i <= n; i++) {
    scanf("%d", &x);
    dopo[x] = 1;
  }
  otrz = fft(dopo, dopo);
  while (otrz.size() > m + 1) otrz.pop_back();
  for (int i = 1; i < otrz.size(); i++) {
    if (otrz[i] && !dopo[i]) {
      printf("NO");
      return 0;
    }
    if (otrz[i] == 2) {
      wyn.push_back(i);
    }
  }
  printf("YES\n");
  printf("%d\n", (int)wyn.size());
  for (int i = 0; i < wyn.size(); i++) {
    printf("%d ", wyn[i]);
  }
  return 0;
}
