#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void rd(T &x) {
  char ch;
  x = 0;
  bool fl = false;
  while (!isdigit(ch = getchar())) (ch == '-') && (fl = true);
  for (x = (ch ^ '0'); isdigit(ch = getchar()); x = x * 10 + (ch ^ '0'))
    ;
  (fl == true) && (x = -x);
}
template <class T>
inline void output(T x) {
  if (x / 10) output(x / 10);
  putchar(x % 10 + '0');
}
template <class T>
inline void ot(T x) {
  if (x < 0) putchar('-'), x = -x;
  output(x);
  putchar(' ');
}
template <class T>
inline void prt(T a[], int st, int nd) {
  for (register int i = st; i <= nd; ++i) ot(a[i]);
  putchar('\n');
}
namespace Miracle {
const int N = 50000 + 5;
int n, p;
int a[N], pos[N], tot;
int has[N], cnt;
int base[N];
bool fl;
void dfs(int x, int xo, int sum) {
  if (fl) return;
  if (x == tot + 1) {
    if (xo == 0 && sum == 0 && cnt) {
      fl = true;
      puts("Yes");
      printf("%d\n", cnt);
      prt(has, 1, cnt);
    }
    return;
  }
  dfs(x + 1, xo, sum);
  has[++cnt] = pos[x];
  dfs(x + 1, xo ^ a[x], (sum * base[a[x]] + a[x]) % p);
  has[cnt--] = 0;
}
int main() {
  rd(n);
  rd(p);
  int x;
  for (register int i = 1; i <= n; ++i) {
    rd(x);
    if (x <= 25) a[++tot] = x, pos[tot] = i;
  }
  for (register int i = 1; i <= 9; ++i) base[i] = 10;
  for (register int i = 10; i <= 25; ++i) base[i] = 100;
  fl = false;
  dfs(1, 0, 0);
  if (!fl) {
    puts("No");
  }
  return 0;
}
}  // namespace Miracle
signed main() {
  Miracle::main();
  return 0;
}
