#include <bits/stdc++.h>
using namespace std;
void fft(vector<complex<double> > &a, bool invert) {
  int n = a.size(), lg = 0;
  while (1 << lg < n) ++lg;
  assert(1 << lg == n);
  for (int i = 0; i < n; ++i) {
    int rev = 0;
    for (int j = 0; j < lg; ++j)
      if ((i & 1 << j) != 0) rev |= 1 << (lg - j - 1);
    if (i < rev) swap(a[i], a[rev]);
  }
  vector<complex<double> > roots(n);
  for (int i = 0; i < n; ++i) {
    double a = 2 * M_PI * i / n * (invert ? -1 : 1);
    roots[i] = complex<double>(cos(a), sin(a));
  }
  for (int len = 2; len <= n; len *= 2)
    for (int i = 0; i < n; i += len)
      for (int j = 0; j < len / 2; ++j) {
        complex<double> u = a[i + j],
                        v = a[i + j + len / 2] * roots[n / len * j];
        a[i + j] = u + v;
        a[i + j + len / 2] = u - v;
      }
  if (invert)
    for (int i = 0; i < n; ++i) a[i] /= n;
}
vector<int> multiply(const vector<int> &a, const vector<int> &b) {
  int m = a.size(), n = b.size(), p = 2;
  while (p < m + n - 1) p <<= 1;
  vector<complex<double> > pa(p), pb(p);
  for (int i = 0; i < m; ++i) pa[i] = complex<double>(a[i], 0);
  for (int i = 0; i < n; ++i) pb[i] = complex<double>(b[i], 0);
  fft(pa, false);
  fft(pb, false);
  for (int i = 0; i < p; ++i) pa[i] *= pb[i];
  fft(pa, true);
  vector<int> res(p);
  for (int i = 0; i < p; ++i) res[i] = (int)round(real(pa[i]));
  return res;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  int n, m;
  cin >> n >> m;
  vector<bool> hasBag(m + 1);
  vector<int> p(m + 1);
  for (int i = 0; i < n; ++i) {
    int w;
    cin >> w;
    p[w] = 1;
    hasBag[w] = true;
  }
  p = multiply(p, p);
  for (int i = 1; i <= m; ++i)
    if (p[i] > 0) {
      if (!hasBag[i]) return cout << "NO", 0;
      hasBag[i] = false;
    }
  printf("YES\n%d\n", count(hasBag.begin(), hasBag.end(), 1));
  for (int i = 1; i <= m; ++i)
    if (hasBag[i] == 1) printf("%d ", i);
  return 0;
}
