#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-5;
struct cp {
  double x, y;
  cp(double x = 0, double y = 0) : x(x), y(y) {}
};
cp operator+(cp a, cp b) { return cp(a.x + b.x, a.y + b.y); }
cp operator-(cp a, cp b) { return cp(a.x - b.x, a.y - b.y); }
cp operator*(cp a, cp b) {
  return cp(a.x * b.x - a.y * b.y, a.x * b.y + a.y * b.x);
}
int rev[2097152], N;
cp* w[21];
void pre(int n) {
  int i, j, k;
  for (N = 1, k = 0; N <= n; N <<= 1) k++;
  for (i = 0; i < N; i++) rev[i] = (rev[i >> 1] >> 1) | ((i & 1) << (k - 1));
  for (i = 2, k = 0; i <= N; i <<= 1, k++) {
    w[k] = new cp[i >> 1];
    for (j = 0; j < i >> 1; j++)
      w[k][j] = cp(cos(j * 3.14159265358979323846 / (i / 2)),
                   sin(j * 3.14159265358979323846 / (i / 2)));
  }
}
void fft(cp* a, int on) {
  int i, j, k, f;
  cp t;
  for (i = 0; i < N; i++) {
    if (i < rev[i]) swap(a[i], a[rev[i]]);
  }
  for (i = 2, f = 0; i <= N; i <<= 1, f++) {
    for (j = 0; j < N; j += i) {
      for (k = 0; k < i >> 1; k++) {
        t = w[f][k];
        t.y *= on;
        t = t * a[i / 2 + j + k];
        a[i / 2 + j + k] = a[j + k] - t;
        a[j + k] = a[j + k] + t;
      }
    }
  }
  if (on == -1) {
    for (i = 0; i < N; i++) a[i].x /= N;
  }
}
cp A[2097152];
bool f[1000010];
int main() {
  int n, m, i, x, cnt;
  scanf("%d%d", &n, &m);
  for (i = 1; i <= n; i++) {
    scanf("%d", &x);
    A[x] = 1;
    f[x] = 1;
  }
  pre(m * 2);
  fft(A, 1);
  for (i = 0; i < N; i++) A[i] = A[i] * A[i];
  fft(A, -1);
  for (i = 1; i <= m; i++) {
    if (!f[i] && fabs(A[i].x) > eps) {
      puts("NO");
      return 0;
    }
  }
  cnt = 0;
  for (i = 1; i <= m; i++) {
    if (f[i] && fabs(A[i].x) < eps) cnt++;
  }
  printf("YES\n%d\n", cnt);
  for (i = 1; i <= m; i++) {
    if (f[i] && fabs(A[i].x) < eps) printf("%d ", i);
  }
}
