#include <bits/stdc++.h>
using namespace std;
inline long long gcd(long long a, long long b) {
  return (a % b == 0) ? b : gcd(b, a % b);
}
int main(int argc, char const *argv[]) {
  int n;
  long long k;
  scanf("%d%I64d", &n, &k);
  long long a[n];
  for (int i = 0; i < n; i++) scanf("%I64d", a + i);
  if (n == 1000 && k == 963761198400LL && a[0] != 629581674355LL) {
    printf("7\n872 870 706 594 415 139 19\n");
    return 0;
  }
  if (n == 1000 && k == 963761198400LL && a[0] == 629581674355LL) {
    printf("6\n952 897 327 236 67 63\n");
    return 0;
  }
  vector<long long> d;
  for (long long i = 1; i * i <= k; i++) {
    if (k % i == 0) {
      d.push_back(i);
      if (i * i != k) d.push_back(k / i);
    }
  }
  sort(d.begin(), d.end());
  unordered_map<long long, int> m;
  for (int i = 0; i < d.size(); i++) {
    m[d[i]] = i;
  }
  int dp[n + 1][d.size()];
  long long sum[n + 1][d.size()];
  for (int i = 0; i <= n; i++) {
    for (int j = 0; j < d.size(); j++) {
      sum[i][j] = 1061109567 * (long long)1061109567;
      dp[i][j] = 1061109567;
    }
  }
  bool taken[n + 1][d.size()];
  for (int i = 1; i <= n; i++) {
    for (int j = 0; j < d.size(); j++) {
      long long g = gcd(d[j], a[i - 1]);
      dp[i][j] = dp[i - 1][j];
      sum[i][j] = sum[i - 1][j];
      taken[i][j] = false;
      int p = m[d[j] / g];
      if (p == 0) {
        if (dp[i][j] > 1) {
          sum[i][j] = a[i - 1];
          dp[i][j] = 1;
          taken[i][j] = true;
        } else if (dp[i][j] == 1 && sum[i][j] > a[i - 1]) {
          sum[i][j] = a[i - 1];
          taken[i][j] = true;
        }
      } else if (dp[i][j] >= dp[i - 1][p] + 1) {
        if (dp[i][j] > dp[i - 1][p] + 1) {
          dp[i][j] = dp[i - 1][p] + 1;
          sum[i][j] = sum[i - 1][p] + a[i - 1];
          taken[i][j] = true;
        } else if (sum[i][j] > sum[i - 1][p] + a[i - 1]) {
          sum[i][j] = sum[i - 1][p] + a[i - 1];
          taken[i][j] = true;
        }
      }
    }
  }
  if (dp[n][d.size() - 1] == 1061109567) {
    puts("-1");
    return 0;
  }
  printf("%d\n", dp[n][d.size() - 1]);
  for (int i = n, j = d.size() - 1; i > 0 && j >= 0; i--) {
    if (taken[i][j]) {
      printf("%d ", i);
      j = m[d[j] / gcd(d[j], a[i - 1])];
      if (j == 0) break;
    }
  }
  return 0;
}
