#include <bits/stdc++.h>
using namespace std;
int q[32], qq[32], pos[32], n, p;
bool f[32][32][50005];
pair<bool, unsigned short> fr[32][32][50005];
int main() {
  scanf("%d%d", &n, &p);
  for (int i = (int)(1); i <= (int)(n); i++) {
    int x;
    scanf("%d", &x);
    if (x <= 31) {
      q[++*q] = x;
      pos[*q] = i;
    }
  }
  for (int i = (int)(1); i <= (int)(*q); i++) {
    f[i][q[i]][q[i] % p] = 1;
    fr[i][q[i]][q[i] % p] = pair<bool, unsigned short>(1, p + 1);
    for (int j = (int)(0); j <= (int)(31); j++)
      for (int k = (int)(0); k <= (int)(p - 1); k++)
        if (f[i - 1][j][k]) {
          f[i][j][k] = 1;
          fr[i][j][k] = pair<bool, unsigned short>(0, 0);
          int nv = (k * (q[i] <= 9 ? 10 : 100) + q[i]) % p;
          f[i][j ^ q[i]][nv] = 1;
          fr[i][j ^ q[i]][nv] = pair<bool, unsigned short>(1, k);
        }
  }
  if (!f[*q][0][0]) return puts("No"), 0;
  puts("Yes");
  int px = 0, py = 0;
  for (int i = (int)(*q); i >= (int)(1); i--) {
    if (py < 0 || py >= p) break;
    if (fr[i][px][py].first == 0) continue;
    int v1 = fr[i][px][py].second;
    px ^= q[i];
    py = v1;
    qq[++*qq] = pos[i];
  }
  reverse(qq + 1, qq + *qq + 1);
  printf("%d\n", *qq);
  for (int i = (int)(1); i <= (int)(*qq); i++) printf("%d ", qq[i]);
}
