#include <bits/stdc++.h>
using namespace std;
int num[33], p, n, cnt = 0, a[33], ans[33];
unsigned short dp[33][33][50000 + 5], pre[33][33][50000 + 5];
int w(int x) { return x >= 10 ? 100 : 10; }
void update(int x, int y, int z, int k, bool flag) {
  if (!dp[x][y][z]) dp[x][y][z] = flag ? 2 : 1, pre[x][y][z] = k;
}
void getAns(int i, int j, int k) {
  if (i == 0) return;
  int x = i - 1, y = dp[i][j][k] == 2 ? (a[i] ^ j) : j, z = pre[i][j][k];
  if (dp[i][j][k] == 2) ans[++ans[0]] = i;
  getAns(x, y, z);
}
int main() {
  scanf("%d%d", &n, &p);
  for (int i = 1; i <= n; i++) {
    int x;
    scanf("%d", &x);
    if (x <= 31) a[++cnt] = x, num[cnt] = i;
  }
  n = cnt;
  for (int i = 1; i < n; i++) {
    update(i, a[i], a[i] % p, 0, 1);
    for (int j = 0; j <= n; j++)
      for (int k = 0; k < p; k++)
        if (dp[i][j][k]) {
          update(i + 1, j, k, k, 0);
          update(i + 1, j ^ a[i + 1], (k * w(a[i + 1]) + a[i + 1]) % p, k, 1);
        }
  }
  if (dp[n][0][0]) {
    puts("Yes");
    getAns(n, 0, 0);
    printf("%d\n", ans[0]);
    for (int i = ans[0]; i; i--) printf("%d ", num[ans[i]]);
    puts("");
  } else
    puts("No");
  return 0;
}
