#include <bits/stdc++.h>
const int N = 1050000, g = 3, mo = 998244353;
int a[N], ans[N], rev[N << 1], b[N << 1];
int qsm(int x, int y) {
  int i = 1;
  for (; y; y >>= 1, x = 1ll * x * x % mo)
    if (y & 1) i = 1ll * i * x % mo;
  return i;
}
void FFT(int *a, int n, int f) {
  for (int i = 0; i < n; i++)
    if (i < rev[i]) std::swap(a[i], a[rev[i]]);
  for (int i = 1; i < n; i <<= 1) {
    int wn = qsm(g, (mo - 1) / i / 2);
    if (f == -1) wn = qsm(wn, mo - 2);
    for (int j = 0; j < n; j += i << 1) {
      int w = 1;
      for (int k = 0; k < i; k++, w = 1ll * w * wn % mo) {
        int x = a[j + k], y = 1ll * w * a[j + k + i] % mo;
        a[j + k] = (x + y) % mo;
        a[j + k + i] = (x - y) % mo;
      }
    }
  }
  if (f == -1) {
    int invn = qsm(n, mo - 2);
    for (int i = 0; i < n; i++) a[i] = 1ll * a[i] * invn % mo;
  }
}
int main() {
  int n, m;
  scanf("%d%d\n", &n, &m);
  for (int i = 1; i <= n; i++) {
    int x;
    scanf("%d", &x);
    a[x] = b[x] = 1;
  }
  int len = 0, L = 1;
  for (; L <= m * 2; len++) L <<= 1;
  for (int i = 0; i < L; i++)
    rev[i] = rev[i >> 1] >> 1 ^ ((i & 1) << (len - 1));
  FFT(b, L, 1);
  for (int i = 0; i < L; i++) b[i] = 1ll * b[i] * b[i] % mo;
  FFT(b, L, -1);
  int k = 0;
  for (int i = 1; i <= m; i++)
    if (!a[i] && b[i]) {
      printf("NO\n");
      return 0;
    } else if (a[i] && !b[i])
      ans[++k] = i;
  printf("YES\n%d\n", k);
  for (int i = 1; i <= k; i++) printf("%d ", ans[i]);
}
