#include <bits/stdc++.h>
using namespace std;
const int maxn = 50010;
const int maxp = 50010;
pair<int, int> a[maxn] = {};
int n, p;
int cnt = 0;
int len[maxn] = {};
int power[10] = {};
int f[maxp][150] = {};
pair<int, int> pre[maxp][150] = {};
int get_len(int a) {
  int ret = 0;
  while (a) {
    ret++;
    a /= 10;
  }
  return ret;
}
int t;
stack<int> S;
int main() {
  ios::sync_with_stdio(0);
  cin >> n >> p;
  for (int i = 1; i <= n; ++i) {
    cin >> t;
    if (t <= 37) {
      a[++cnt] = make_pair(t, i);
    }
  }
  n = cnt;
  int mx = 0;
  for (int i = 1; i <= n; ++i) {
    len[i] = get_len(a[i].first);
    mx = max(mx, len[i]);
  }
  power[0] = 1;
  for (int i = 1; i <= mx; ++i) {
    power[i] = power[i - 1] * 10 % p;
  }
  f[a[1].first % p][a[1].first] = 1;
  for (int i = 2; i <= n; ++i) {
    for (int mod = 0; mod < p; ++mod) {
      for (int Xor = 0; Xor < 150; ++Xor) {
        if (f[mod][Xor] && f[mod][Xor] != i) {
          int nxtmod = (mod * power[len[i]] % p + a[i].first) % p;
          int nxtXor = (Xor ^ a[i].first);
          if (!f[nxtmod][nxtXor]) {
            f[nxtmod][nxtXor] = i;
            pre[nxtmod][nxtXor] = make_pair(f[mod][Xor], mod);
          }
        }
      }
    }
    if (!f[a[i].first % p][a[i].first]) f[a[i].first % p][a[i].first] = i;
  }
  if (f[0][0]) {
    int cur_Xor = 0;
    int cur_mod = 0;
    int cur = f[0][0];
    while (cur) {
      S.push(a[cur].second);
      int t = cur;
      pair<int, int> tmp = pre[cur_mod][cur_Xor];
      cur = tmp.first, cur_mod = tmp.second;
      cur_Xor ^= a[t].first;
    }
    cout << "Yes" << endl;
    cout << int(S.size()) << endl;
    while (!S.empty()) {
      cout << S.top() << " ";
      S.pop();
    }
    cout << endl;
    return 0;
  }
  cout << "No" << endl;
  return 0;
}
