#include <bits/stdc++.h>
using namespace std;
const int Ginv = (998244353 + 1) / 3;
const int N = 1048576;
int F[N << 1], n, m, G[N], lim, rev[N << 1];
void init(int n) {
  int l = -1;
  for (lim = 1; lim < n; lim <<= 1) ++l;
  for (int i = 1; i < lim; ++i) rev[i] = (rev[i >> 1] >> 1) | ((i & 1) << l);
}
inline int pow(int a, int b) {
  int ret = 1;
  for (; b; b >>= 1) {
    if (b & 1) ret = 1LL * ret * a % 998244353;
    a = 1LL * a * a % 998244353;
  }
  return ret;
}
void NTT(int* a, int f) {
  for (int i = 1; i < lim; ++i)
    if (i < rev[i]) swap(a[i], a[rev[i]]);
  for (int i = 1; i < lim; i <<= 1) {
    const int gi = pow(f ? 3 : Ginv, (998244353 - 1) / (i << 1));
    for (int j = 0; j < lim; j += i << 1) {
      int g = 1;
      for (int k = 0; k < i; ++k) {
        int x = a[j + k], y = 1LL * g * a[j + k + i] % 998244353;
        a[j + k] = (x + y) % 998244353;
        a[j + k + i] = (x - y + 998244353) % 998244353;
        g = 1LL * g * gi % 998244353;
      }
    }
  }
  if (!f) {
    const int inv = pow(lim, 998244353 - 2);
    for (int i = 0; i < lim; ++i) a[i] = 1LL * a[i] * inv % 998244353;
  }
}
int main() {
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  cin >> n >> m;
  for (int i = 1, x; i <= n; ++i) {
    cin >> x;
    G[x] = 1;
  }
  memcpy(F, G, sizeof G);
  init(m << 1);
  NTT(F, 1);
  for (int i = 0; i < lim; ++i) F[i] = F[i] * 1LL * F[i] % 998244353;
  NTT(F, 0);
  for (int i = 0; i <= m; ++i)
    if (F[i] && !G[i]) {
      cout << "NO\n";
      return 0;
    }
  int ans = 0;
  for (int i = 0; i <= m; ++i)
    if (G[i] && !F[i]) ++ans;
  cout << "YES\n" << ans << '\n';
  for (int i = 0; i <= m; ++i)
    if (G[i] && !F[i]) cout << i << ' ';
  return 0;
}
