#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int s = 0;
  char c;
  while ((c = getchar()) < '0' || c > '9')
    ;
  do {
    s = s * 10 + c - '0';
  } while ((c = getchar()) >= '0' && c <= '9');
  return s;
}
const int N = 50010, L = 32;
int f[L][L][N];
int n, p, tot, a[N], id[N];
int work() {
  int i, j, k;
  memset(f, 0xff, sizeof f);
  f[0][0][0] = 0;
  for (i = 1; i <= n; i++) {
    int len = 1;
    for (int x = a[i]; x; x /= 10) len = len * 10 % p;
    for (j = 0; j < L; j++)
      for (k = 0; k < p; k++)
        if (f[i - 1][j][k] != -1) {
          f[i][j][k] = max(f[i][j][k], j + k * L);
          int t = ((long long)k * len + a[i]) % p;
          f[i][j ^ a[i]][t] = max(f[i][j ^ a[i]][t], j + k * L);
        }
  }
  if (f[n][0][0] == -1) return 0;
  static int li[L];
  int lit = 0;
  for (i = n, j = k = 0; i >= 1; i--) {
    int pj = f[i][j][k] & (L - 1), pk = f[i][j][k] / L;
    if (pj != j) li[++lit] = id[i];
    j = pj, k = pk;
  }
  if (lit == 0) return 0;
  puts("Yes");
  printf("%d\n", lit);
  while (lit) printf("%d ", li[lit--]);
  return 1;
}
int main() {
  int i;
  n = read(), p = read();
  for (i = 1; i <= n; i++)
    if ((a[tot + 1] = read()) < L) id[++tot] = i;
  n = tot;
  if (!work()) puts("No");
  return 0;
}
