#include <bits/stdc++.h>
using namespace std;
int read() {
  int x = 0, f = 1;
  char c = getchar();
  while (!isdigit(c)) {
    if (c == '-') f = -1;
    c = getchar();
  }
  while (isdigit(c)) {
    x = (x << 3) + (x << 1) + (c ^ 48);
    c = getchar();
  }
  return x * f;
}
const int maxn = 3e6 + 10, mod = 998244353;
int Pow(int x, int p) {
  int r = 1;
  while (p) {
    if (p & 1) r = 1LL * x * r % mod;
    x = 1LL * x * x % mod;
    p >>= 1;
  }
  return r;
}
int rev[maxn], g[maxn], inv;
void init(int len) {
  int z = __builtin_ctz(len);
  for (int i = 0; i < len; ++i)
    rev[i] = (rev[i >> 1] >> 1) | ((i & 1) << z - 1);
  int G = Pow(3, (mod - 1) / len);
  g[0] = 1;
  for (int i = 1; i <= len; ++i) g[i] = 1LL * g[i - 1] * G % mod;
  inv = Pow(len, mod - 2);
}
void DFT(int *a, int len, int fg) {
  for (int i = 0; i < len; ++i)
    if (rev[i] > i) swap(a[rev[i]], a[i]);
  for (int i = 2; i <= len; i <<= 1)
    for (int j = 0; j < len; j += i)
      for (int k = 0; k < (i >> 1); ++k) {
        int y = 1LL * (fg ? g[len / i * k] : g[len - len / i * k]) *
                a[j + k + (i >> 1)] % mod;
        int x = a[j + k];
        a[j + k] = (x + y) % mod;
        a[j + k + (i >> 1)] = (x - y) % mod;
      }
  if (!fg)
    for (int i = 0; i < len; ++i) a[i] = 1LL * a[i] * inv % mod;
}
int a[maxn], A[maxn], ans[maxn];
int main() {
  int n = read(), m = read();
  for (int i = 1; i <= n; ++i) {
    int x = read();
    a[x]++;
    A[x]++;
  }
  a[0] = 1;
  int len = 1;
  while (len <= m + m) len <<= 1;
  init(len);
  DFT(a, len, 1);
  for (int i = 0; i < len; ++i) a[i] = 1LL * a[i] * a[i] % mod;
  DFT(a, len, 0);
  for (int i = 0; i < len; ++i) a[i] = (a[i] + mod) % mod;
  int tot = 0;
  int fg = 1;
  for (int i = 1; i <= m; ++i)
    if (A[i] && a[i] == 2)
      ans[++tot] = i;
    else if (!A[i] && a[i])
      fg = 0;
  if (!fg) {
    printf("NO\n");
    return 0;
  }
  printf("YES\n");
  cout << tot << endl;
  for (int i = 1; i <= tot; ++i) printf("%d ", ans[i]);
  return 0;
}
