#include <bits/stdc++.h>
using namespace std;
const int maxn = 1 << 21;
const int MOD = 998244353, base = 3;
int flag[maxn], a[maxn], g[maxn], R[maxn];
int K, m, x, n, L, rev, tmp;
vector<int> ans;
inline int power(int x, int p) {
  int res = 1;
  while (p) {
    if (p & 1) res = 1LL * res * x % MOD;
    x = 1LL * x * x % MOD;
    p >>= 1;
  }
  return res;
}
void NTT(int a[maxn], int n) {
  for (int i = (0); i <= int(n - 1); i++)
    if (i < R[i]) swap(a[i], a[R[i]]);
  for (int d = 1, t = n >> 1; d < n; d <<= 1, t >>= 1)
    for (int i = 0; i < n; i += (d << 1))
      for (int j = 0; j < d; j++) {
        tmp = 1LL * g[t * j] * a[i + j + d] % MOD;
        a[i + j + d] = (a[i + j] - tmp + MOD) % MOD;
        a[i + j] = (a[i + j] + tmp) % MOD;
      }
}
int main() {
  scanf("%d%d", &K, &m);
  m++;
  for (int i = (1); i <= int(K); i++) scanf("%d", &x), flag[x] = a[x] = 1;
  for (n = 1; n <= 2 * m; n <<= 1, L++)
    ;
  for (int i = (0); i <= int(n - 1); i++)
    R[i] = (R[i >> 1] >> 1) | ((i & 1) << (L - 1));
  g[0] = 1;
  g[1] = power(base, (MOD - 1) / n);
  for (int i = (2); i <= int(n - 1); i++) g[i] = 1LL * g[i - 1] * g[1] % MOD;
  NTT(a, n);
  for (int i = (0); i <= int(n - 1); i++) a[i] = 1LL * a[i] * a[i] % MOD;
  g[1] = power(g[1], MOD - 2);
  for (int i = (2); i <= int(n - 1); i++) g[i] = 1LL * g[i - 1] * g[1] % MOD;
  NTT(a, n);
  rev = power(n, MOD - 2);
  for (int i = (0); i <= int(n - 1); i++) a[i] = 1LL * a[i] * rev % MOD;
  for (int i = (0); i <= int(m - 1); i++)
    if (a[i] && !flag[i])
      return puts("NO"), 0;
    else if (!a[i] && flag[i])
      ans.push_back(i);
  puts("YES");
  printf("%d\n", ans.size());
  for (int i = (0); i <= int(ans.size() - 1); i++) printf("%d ", ans[i]);
  return 0;
}
