#include <bits/stdc++.h>
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize("Ofast")
using namespace std;
namespace ywy {
inline int get() {
  int n = 0;
  char c;
  while ((c = getchar()) || 23333) {
    if (c >= '0' && c <= '9') break;
    if (c == '-') goto s;
  }
  n = c - '0';
  while ((c = getchar()) || 23333) {
    if (c >= '0' && c <= '9')
      n = n * 10 + c - '0';
    else
      return (n);
  }
s:
  while ((c = getchar()) || 23333) {
    if (c >= '0' && c <= '9')
      n = n * 10 - c + '0';
    else
      return (n);
  }
}
int hudie[2222222];
inline long long mi(int a, int b) {
  long long ans = 1, tmp = a;
  while (b) {
    if (b & 1) ans = (ans * tmp) % 998244353;
    tmp = (tmp * tmp) % 998244353;
    b >>= 1;
  }
  return (ans);
}
inline void ntt(int n, long long *f, long long g) {
  for (register int i = 0; i < n; i++)
    if (i < hudie[i]) swap(f[i], f[hudie[i]]);
  for (register int bit = 2; bit <= n; bit <<= 1) {
    long long dk = mi(g, (998244353 - 1) / bit);
    for (register int i = 0; i < n; i += bit) {
      long long dwg = 1;
      for (register int j = i; j < i + (bit >> 1); j++) {
        long long cjr = (f[j + (bit >> 1)] * dwg) % 998244353;
        f[j + (bit >> 1)] = (f[j] + 998244353 - cjr) % 998244353;
        f[j] = (f[j] + cjr) % 998244353;
        dwg = (dwg * dk) % 998244353;
      }
    }
  }
}
long long a[2222222];
unsigned char bv[1000001], ggf[1000001];
int ints[1000001];
void ywymain() {
  int n = get(), m = get();
  for (register int i = 1; i <= n; i++)
    a[ints[i] = get()] = 1, ggf[ints[i]] = 1;
  a[0] = 1;
  int k = 1;
  while (k <= m + m) k <<= 1;
  for (register int i = 0; i < k; i++)
    hudie[i] = (hudie[i >> 1] >> 1) | ((i & 1) ? (k >> 1) : 0);
  ntt(k, a, 3);
  for (register int i = 0; i < k; i++) a[i] = (a[i] * a[i]) % 998244353;
  ntt(k, a, mi(3, 998244353 - 2));
  long long inv = mi(k, 998244353 - 2);
  int ans = n;
  for (register int i = 1; i <= m; i++) {
    a[i] = (a[i] * inv) % 998244353;
    if (a[i] && !ggf[i]) {
      printf("NO\n");
      return;
    }
    if (a[i] > 2) bv[i] = 1, ans--;
  }
  printf("YES\n");
  cout << ans << endl;
  for (register int i = 1; i <= n; i++) {
    if (!bv[ints[i]]) printf("%d ", ints[i]);
  }
}
}  // namespace ywy
int main() {
  ywy::ywymain();
  return (0);
}
