#include <bits/stdc++.h>
using namespace std;
int n, p, pos[35], w[50], ps[50];
bool f[35][35][2][50010];
vector<int> v;
vector<int> ans;
void getans(int id, int x, bool has, int md) {
  if (id == 0) return;
  if (has) {
    for (int pre = 0; pre < p; pre++) {
      if ((pre * w[v[id]] + v[id]) % p == md) {
        if (f[id - 1][x ^ v[id]][1][pre]) {
          getans(id - 1, x ^ v[id], 1, pre);
          ans.push_back(ps[id]);
          return;
        } else if (f[id - 1][x ^ v[id]][0][pre]) {
          getans(id - 1, x ^ v[id], 0, pre);
          ans.push_back(ps[id]);
          return;
        }
      }
    }
    getans(id - 1, x, 1, md);
  } else
    getans(id - 1, x, has, md);
}
inline int power(int a, int b) {
  int out = 1;
  while (b) {
    if (b & 1) out = 1ll * out * a % p;
    a = 1ll * a * a % p;
    b >>= 1;
  }
  return out;
}
int main() {
  scanf("%d%d", &n, &p);
  v.push_back(0);
  for (int i = 1, ti; i <= n; i++) {
    scanf("%d", &ti);
    if (ti < 32) ps[v.size()] = i, v.push_back(ti);
  }
  for (int i = 1; i <= 9; i++) w[i] = 10;
  for (int i = 10; i <= 32; i++) w[i] = 100;
  int c = v.size() - 1;
  f[0][0][0][0] = 1;
  for (int i = 1; i <= c; i++) {
    for (int j = 0; j < 32; j++) {
      for (int k = 0; k < 2; k++) {
        for (int l = 0; l < p; l++) {
          if (f[i - 1][j][k][l]) {
            f[i][j ^ v[i]][1][(l * w[v[i]] + v[i]) % p] = 1;
            f[i][j][k][l] = 1;
          }
        }
      }
    }
  }
  if (f[c][0][1][0]) {
    puts("Yes");
    getans(c, 0, 1, 0);
    printf("%d\n", ans.size());
    for (int &x : ans) printf("%d ", x);
  } else
    puts("No");
  return 0;
}
