#include <bits/stdc++.h>
using namespace std;
const double pi = acos(-1.0);
int n, m, l;
int r[2200000];
complex<double> a[2200000], b[2200000];
void fft(complex<double> *a, int f) {
  for (int i = 0; i < n; ++i)
    if (i < r[i]) swap(a[i], a[r[i]]);
  for (int i = 1; i < n; i <<= 1) {
    complex<double> wn(cos(pi / i), f * sin(pi / i));
    for (int p = i << 1, j = 0; j < n; j += p) {
      complex<double> w(1, 0);
      for (int k = 0; k < i; k++, w *= wn) {
        complex<double> x = a[j + k], y = w * a[j + k + i];
        a[j + k] = x + y;
        a[j + k + i] = x - y;
      }
    }
  }
}
int c[2200000], N, M;
vector<int> ans;
void no() {
  puts("NO");
  exit(0);
}
int main() {
  scanf("%d%d", &N, &M);
  for (int i = 1; i <= N; ++i) {
    int x;
    scanf("%d", &x);
    c[x]++;
  }
  for (int i = 1; i <= M; ++i)
    if (c[i]) a[i] = 1;
  m = (M << 1);
  for (n = 1; n <= m; n <<= 1) l++;
  for (int i = 0; i < n; ++i) r[i] = (r[i >> 1] >> 1) | ((i & 1) << (l - 1));
  fft(a, 1);
  for (int i = 0; i < n; ++i) a[i] = a[i] * a[i];
  fft(a, -1);
  for (int i = 0; i <= M; ++i)
    if ((int)(a[i].real() / n + 0.5) > 0) {
      if (!c[i]) no();
      c[i] = 0;
    }
  for (int i = 1; i <= M; ++i)
    if (c[i]) ans.push_back(i);
  puts("YES");
  printf("%d\n", (int)ans.size());
  for (auto v : ans) printf("%d ", v);
  puts("");
  return 0;
}
