#include <bits/stdc++.h>
using namespace std;
const int mn = (1 << 21) + 2;
const double pi = 3.1415926535897932384626433832795;
int n, m, f[mn];
bool c[mn];
vector<int> ans;
struct node {
  double x, y;
  node(){};
  node(double a, double b) { x = a, y = b; }
} a[mn], w[mn], tt[mn];
node operator*(node a, node b) {
  return node(a.x * b.x - a.y * b.y, a.x * b.y + b.x * a.y);
}
node operator+(node a, node b) { return node(a.x + b.x, a.y + b.y); }
node operator-(node a, node b) { return node(a.x - b.x, a.y - b.y); }
void dft(node *a, int s, int t) {
  if (n >> t == 1) return;
  dft(a, s, t + 1);
  dft(a, s + (1 << t), t + 1);
  for (int i = 0; i <= (n >> (t + 1)) - 1; ++i) {
    int p = (i << (t + 1)) + s;
    node wt = w[i << t] * a[p + (1 << t)];
    tt[i] = a[p] + wt;
    tt[i + (n >> (t + 1))] = a[p] - wt;
  }
  for (int i = 0; i <= (n >> t) - 1; ++i) a[(i << t) + s] = tt[i];
}
void fft() {
  for (int i = 0; i <= n - 1; ++i)
    w[i] = node(cos(i * 2 * pi / n), sin(i * 2 * pi / n));
  dft(a, 0, 0);
  for (int i = 0; i <= n - 1; ++i) a[i] = a[i] * a[i];
  for (int i = 0; i <= n - 1; ++i) w[i].y *= -1;
  dft(a, 0, 0);
  for (int i = 0; i <= n - 1; ++i) a[i].x /= n;
}
int main() {
  scanf("%d%d", &m, &n);
  for (int i = 1; i <= m; ++i) {
    scanf("%d", f + i);
    c[f[i]] = 1;
    a[f[i]] = node(1, 0);
  }
  int l = 1;
  while (l < n * 2) l += l;
  swap(n, l);
  fft();
  swap(n, l);
  for (int i = 1; i <= n; ++i) {
    if (a[i].x > 0.5) {
      if (!c[i]) {
        puts("NO");
        return 0;
      }
    } else if (c[i])
      ans.push_back(i);
  }
  puts("YES");
  printf("%d\n", ans.size());
  for (int i = 1; i <= ans.size(); ++i) {
    printf("%d", ans[i - 1]);
    if (i == ans.size())
      printf("\n");
    else
      printf(" ");
  }
  return 0;
}
