#include <bits/stdc++.h>
using namespace std;
const int PR(998244353), G(3), L(1 << 21);
int l;
int w[L];
int mul(long long a, long long b) { return a * b % PR; }
int pow(int a, int b) {
  if (b == 0) return 1;
  int t = pow(a, b / 2);
  t = mul(t, t);
  return b % 2 ? mul(t, a) : t;
}
struct FFT {
  int x[L];
  void trans(bool bo) {
    int n = 1 << l, theta = bo ? (PR - 1) / n : (1 - PR) / n;
    w[0] = 1;
    w[1] = pow(G, PR - 1 + theta);
    for (int i = 2; i < L; ++i) w[i] = mul(w[i - 1], w[1]);
    int d = 1;
    for (int m = n; m >= 2; m >>= 1) {
      int mh = m >> 1;
      for (int i = 0; i < mh; ++i) {
        for (int j = i; j < n; j += m) {
          int k = j + mh;
          int t = x[j] - x[k];
          x[j] = x[j] + x[k];
          if (x[j] >= PR) x[j] -= PR;
          x[k] = mul(w[d * i], t);
          if (x[k] < 0) x[k] += PR;
        }
      }
      d *= 2;
    }
    int i = 0;
    for (int j = 1; j < n - 1; ++j) {
      for (int k = n >> 1; k > (i ^= k); k >>= 1)
        ;
      if (j < i) swap(x[i], x[j]);
    }
    if (theta < 0) {
      int div = pow(1 << l, PR - 2);
      for (int i = int(0); i < int(1 << l); ++i) x[i] = mul(x[i], div);
    }
  }
};
int n, m;
FFT A, B;
int main() {
  cin >> n >> m;
  for (int i = int(0); i < int(n); ++i) {
    int a;
    cin >> a;
    A.x[a] = B.x[a] = 1;
  }
  A.x[0] = 1;
  for (l = 0; (1 << l) <= m; ++l)
    ;
  ++l;
  A.trans(true);
  B.trans(true);
  for (int i = int(0); i < int(1 << l); ++i) B.x[i] = mul(A.x[i], B.x[i]);
  A.trans(false);
  B.trans(false);
  for (int i = int(1); i < int(m + 1); ++i)
    if (A.x[i] == 0 && B.x[i] > 0) {
      cout << "NO" << endl;
      return 0;
    }
  cout << "YES" << endl;
  int cnt = 0;
  for (int i = int(1); i < int(m + 1); ++i)
    if (B.x[i] == 1) ++cnt;
  cout << cnt << endl;
  bool fi = true;
  for (int i = int(1); i < int(m + 1); ++i)
    if (B.x[i] == 1) {
      if (fi)
        cout << i;
      else
        cout << " " << i;
      fi = false;
    }
  cout << endl;
  return 0;
}
