#include <bits/stdc++.h>
using namespace std;
int n, m, a[2097200], *pw;
int Power(int p, int n) {
  int ans = 1;
  for (; n; n >>= 1, p = (long long)p * p % 1004535809)
    if (n & 1) ans = (long long)ans * p % 1004535809;
  return ans;
}
void Read(int &digit) {
  digit = 0;
  char c;
  for (c = getchar(); c < '0' || c > '9'; c = getchar())
    ;
  for (; c >= '0' && c <= '9'; digit = digit * 10 + c - '0', c = getchar())
    ;
}
void read() {
  a[0] = 1;
  Read(n), Read(m);
  for (int i = 1, x; i <= n; ++i) Read(x), a[x] = 1;
}
void FFT(int *a, int *b, int step, int n) {
  if (n == 1)
    b[0] = a[0];
  else {
    int m = n >> 1;
    FFT(a, b, step << 1, m), FFT(a + step, b + m, step << 1, m);
    for (int i = 0; i < m; ++i) {
      int even = b[i], odd = (long long)b[i + m] * pw[i * step] % 1004535809;
      b[i] = (odd + even) % 1004535809,
      b[i + m] = (even - odd + 1004535809) % 1004535809;
    }
  }
}
void print() {
  static int pw1[2097200], pw2[2097200], ta[2097200], b[2097200];
  int tn;
  for (tn = 1; tn < m + m + 1; tn <<= 1)
    ;
  int n = tn;
  int p = Power(3, (1004535809 - 1) / n), inv = Power(p, 1004535809 - 2);
  pw1[0] = 1, pw2[0] = 1;
  for (int i = 1; i < n; ++i)
    pw1[i] = (long long)pw1[i - 1] * p % 1004535809,
    pw2[i] = (long long)pw2[i - 1] * inv % 1004535809;
  pw = pw1;
  FFT(a, ta, 1, n);
  for (int i = 0; i < n; ++i) ta[i] = (long long)ta[i] * ta[i] % 1004535809;
  pw = pw2;
  FFT(ta, b, 1, n);
  static int ans[2097200];
  int tot = 0;
  for (int i = 1; i <= m; ++i) {
    if (!a[i] && b[i]) {
      printf("NO\n");
      exit(0);
    }
    if (a[i] && b[i] == n * 2) ans[++tot] = i;
  }
  printf("YES\n");
  printf("%d\n", tot);
  for (int i = 1; i <= tot; ++i) printf("%d%c", ans[i], i < tot ? ' ' : '\n');
}
int main() {
  read();
  print();
  return 0;
}
