#include <bits/stdc++.h>
using namespace std;
const int N = 1020, M = 7000;
const long long inf = 1ll << 60;
long long k;
int n;
long long a[N], b[N];
pair<int, long long> f[N][M];
int last[N][M];
vector<long long> divisors;
inline long long gcd(long long x, long long y) {
  if (!y) return x;
  return gcd(y, x % y);
}
inline int g(long long x) {
  return lower_bound(divisors.begin(), divisors.end(), x) - divisors.begin();
}
int main() {
  int i, j, x, y;
  cin >> n >> k;
  for (i = 1; i <= n; i++) {
    cin >> a[i];
    b[i] = gcd(a[i], k);
  }
  if (k == 1) {
    cout << 1 << endl;
    long long tt = 1;
    for (i = 1; i <= n; i++) {
      if (a[tt] > a[i]) tt = i;
    }
    cout << tt << endl;
    return 0;
  }
  long long en;
  for (en = 1; 1ll * en * en <= k; en++) {
    if (k % en == 0) {
      divisors.push_back(en);
      if (1ll * en * en != k) {
        divisors.push_back(k / en);
      }
    }
  }
  sort(divisors.begin(), divisors.end());
  for (i = 0; i <= n; i++)
    for (j = 0; j < divisors.size(); j++) f[i][j] = make_pair(n + 1, inf);
  f[0][0] = make_pair(0, 0);
  for (i = 1; i <= n; i++) {
    for (j = 0; j < divisors.size(); j++) {
      if (f[i][j] > f[i - 1][j]) {
        f[i][j] = f[i - 1][j];
        last[i][j] = j;
      }
      long long nowdiv = divisors[j];
      int nxt = g(gcd(k, nowdiv * b[i]));
      pair<int, long long> tmp(f[i - 1][j].first + 1,
                               f[i - 1][j].second + a[i]);
      if (f[i][nxt] > tmp) {
        f[i][nxt] = tmp;
        last[i][nxt] = j;
      }
    }
  }
  if (f[n][g(k)].first >= n) {
    cout << -1 << endl;
  } else {
    vector<long long> ans;
    j = g(k);
    for (i = n; i; i--) {
      if (j != last[i][j]) {
        ans.push_back(i);
      }
      j = last[i][j];
    }
    cout << ans.size() << endl;
    for (i = 0; i < ans.size(); i++) {
      if (i) cout << ' ';
      cout << ans[i];
    }
    cout << endl;
  }
}
