#include <bits/stdc++.h>
using namespace std;
inline int Rd() {
  int ret = 0, fu = 1;
  char ch = getchar();
  while (!isdigit(ch)) {
    if (ch == '-') fu = -1;
    ch = getchar();
  }
  while (isdigit(ch)) ret = ret * 10 + (ch - '0'), ch = getchar();
  return ret * fu;
}
const int N = 1e6 + 5, Mod = 998244353, G = 3;
int n, m, f[4 * N], g[25], invg[25], rec[N];
inline int Ad(int x, int y) { return (x + y > Mod) ? (x + y - Mod) : (x + y); }
inline int Dc(int x, int y) { return (x - y < 0) ? (x - y + Mod) : (x - y); }
inline int Ml(int x, int y) { return 1ll * x * y % Mod; }
int Pow(int x, int y) {
  int ret = 1;
  for (; y; y >>= 1, x = Ml(x, x))
    if (y & 1) ret = Ml(ret, x);
  return ret;
}
int lim, rev[N * 4];
void InitNTT(int n) {
  for (int i = 1; i <= 23; ++i) {
    g[i] = Pow(G, (Mod - 1) >> i);
    invg[i] = Pow(g[i], Mod - 2);
  }
  lim = 1;
  while (lim <= 2 * n) lim <<= 1;
  for (int i = 1; i < lim; ++i)
    rev[i] = (rev[i >> 1] >> 1) | ((i & 1) ? (lim >> 1) : 0);
}
void NTT(int *poly, int type) {
  for (int i = 0; i < lim; ++i)
    if (i < rev[i]) swap(poly[i], poly[rev[i]]);
  int cnt = 1;
  for (int len = 2; len <= lim; len <<= 1) {
    int half = len >> 1, w = (type > 0) ? g[cnt] : invg[cnt];
    for (int bg = 0; bg < lim; bg += len) {
      int now = 1;
      for (int pos = bg; pos < bg + half; ++pos) {
        int tmp = Ml(now, poly[pos + half]);
        poly[pos + half] = Dc(poly[pos], tmp);
        poly[pos] = Ad(poly[pos], tmp);
        now = Ml(now, w);
      }
    }
    ++cnt;
  }
}
vector<int> ans;
int main() {
  n = Rd(), m = Rd();
  for (int i = 1; i <= n; ++i) {
    int x = Rd();
    f[x] = 1, rec[x] = 1;
  }
  InitNTT(m);
  NTT(f, 1);
  for (int i = 0; i < lim; ++i) f[i] = Ml(f[i], f[i]);
  NTT(f, -1);
  int inv = Pow(lim, Mod - 2);
  for (int i = 0; i < lim; ++i) f[i] = Ml(f[i], inv);
  for (int i = 1; i <= m; ++i) {
    if (!f[i]) {
      if (rec[i]) ans.push_back(i);
      continue;
    }
    if (!rec[i]) {
      printf("NO\n");
      return 0;
    }
  }
  printf("YES\n%d\n", ans.size());
  for (int i = 0; i < ans.size(); ++i) printf("%d ", ans[i]);
  printf("\n");
  return 0;
}
