#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e3 + 5;
const int maxm = 1 << 13;
int n;
long long k;
pair<int, long long> dp[maxn][maxm];
int pre[maxn][maxm];
long long gcd(long long a, long long b) { return b == 0 ? a : gcd(b, a % b); }
vector<long long> v;
void get_div(long long k) {
  for (long long i = 1; i * i <= k; i++) {
    if (k % i == 0) {
      long long j = k / i;
      v.push_back(i);
      if (i != j) v.push_back(j);
    }
  }
  sort(v.begin(), v.end());
}
long long a[maxn], c[maxn];
int main() {
  scanf("%d%lld", &n, &k);
  get_div(k);
  for (int i = 1; i <= n; i++) {
    scanf("%lld", &a[i]);
    c[i] = gcd(a[i], k);
  }
  if (k == 1) {
    printf("1\n");
    int p = 1;
    long long minn = a[1];
    for (int i = 2; i <= n; i++) {
      if (a[i] < minn) minn = a[i], p = i;
    }
    printf("%d\n", p);
    return 0;
  }
  int m = v.size();
  for (int i = 0; i <= n; i++)
    for (int j = 0; j < m; j++) dp[i][j] = make_pair((int)1e9, (long long)1e16);
  dp[0][0] = make_pair(0, 0);
  for (int i = 1; i <= n; i++)
    for (int j = 0; j < m; j++) {
      if (dp[i][j] > dp[i - 1][j]) {
        dp[i][j] = dp[i - 1][j];
        pre[i][j] = j;
      }
      int t =
          lower_bound(v.begin(), v.end(), v[j] / gcd(v[j], c[i])) - v.begin();
      if (dp[i][j] >
          make_pair(dp[i - 1][t].first + 1, dp[i - 1][t].second + a[i])) {
        dp[i][j] =
            make_pair(dp[i - 1][t].first + 1, dp[i - 1][t].second + a[i]);
        pre[i][j] = t;
      }
    }
  if (dp[n][m - 1].first > n)
    printf("-1\n");
  else {
    printf("%d\n", dp[n][m - 1].first);
    int k = m - 1;
    bool first = true;
    for (int i = n; i >= 1; i--) {
      if (pre[i][k] != k) {
        if (first) {
          printf("%d", i);
          first = false;
        } else
          printf(" %d", i);
      }
      k = pre[i][k];
    }
  }
  printf("\n");
  return 0;
}
