#include <bits/stdc++.h>
using namespace std;
long long reverse(long long x) {
  long long y = 0;
  for (int i = 21 - 1; i >= 0; i--) {
    y = y | (((x >> i) & 1LL) << (21 - 1 - i));
  }
  return y;
}
long long power(long long x, long long p) {
  long long r = 1;
  while (p > 0) {
    if (p & 1) {
      p--;
      r = (r * x) % 23068673LL;
    } else {
      p >>= 1;
      x = (x * x) % 23068673LL;
    }
  }
  return r;
}
void fft(long long* p, long long* res, long long w) {
  for (int i = 0; i < (1LL << 21); i++) res[reverse(i)] = p[i];
  for (int len = 1; len * 2 <= (1LL << 21); len *= 2) {
    long long wl = power(w, (1LL << 21) / (len * 2));
    for (int s = 0; s < (1LL << 21); s += len * 2) {
      long long wi = 1;
      for (int i = 0; i < len; i++, wi = (wi * wl) % 23068673LL) {
        long long u = (res[s + i] + wi * res[s + i + len]) % 23068673LL,
                  v = ((res[s + i] - wi * res[s + i + len]) % 23068673LL +
                       23068673LL) %
                      23068673LL;
        res[s + i] = u;
        res[s + i + len] = v;
      }
    }
  }
}
long long a[(1LL << 21)], b[(1LL << 21)];
bool sv[(1LL << 21)];
int main() {
  ios_base::sync_with_stdio(false);
  int n, m;
  cin >> n >> m;
  memset(a, 0, sizeof a);
  memset(sv, 0, sizeof sv);
  for (int i = 0; i < n; i++) {
    int buf;
    cin >> buf;
    a[buf] = 1;
    sv[buf] = true;
  }
  fft(a, b, 177147LL);
  for (int i = 0; i < (1LL << 21); i++) {
    b[i] = (b[i] * b[i]) % 23068673LL;
  }
  fft(b, a, power(177147LL, 23068673LL - 2));
  vector<int> ans;
  for (int i = 0; i <= m; i++) {
    if (a[i] != 0 && !sv[i]) {
      cout << "NO";
      return 0;
    }
    if (a[i] == 0 && sv[i]) ans.push_back(i);
  }
  cout << "YES\n" << ans.size() << "\n";
  for (int i = 0; i < ans.size(); i++) cout << ans[i] << " ";
}
