//#pragma GCC optimize("Ofast")
//#pragma GCC target("avx,avx2,fma")
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define fi first
#define se second
#define MOD 1000000007
#define FOR(i,a,b) for (int i = (a);i <= (b);i++)
#define FOD(i,a,b) for (int i = (b);i >= (a);i--)
#define ALL(x) (x).begin(),(x).end()
#define ii pair<int,int>
#define iii pair<int,pair<int,int>>
//const int MOD = 998244853;
const int MAXN = 2e5 + 7;
const int maxn = 1e7 + 7;
int a[MAXN],dp[MAXN],Try[MAXN],prime[maxn];
void sieve(){
FOR(i,2,maxn - 1)if (!prime[i]){
prime[i] = i;
for (ll j = 1ll * i * i;j <= maxn;j+=i)prime[j] = i;
}
}
vector<int> bit[maxn];
void update(int id,int x,int v){
int len = maxn / id;
for (;x <= len;x+=x&-x)bit[id][x] = max(bit[id][x],v);
}
int get(int id,int x){
int ans = 0;
for (;x;x-=x&-x)ans = max(ans,bit[id][x]);
return ans;
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
//freopen("MAXRECT.inp","r",stdin);
//freopen("MAXRECT.out","w",stdout);
sieve();
int n,d;cin >> n >> d;
FOR(i,1,n)cin >> a[i];
FOR(i,1,n){
dp[i] = 1;
int t = a[i];
vector<int> v;
while(t > 1){
int p = prime[t];
while(t % p == 0)t = t / p;
v.push_back(p);
}
if (!d)v.push_back(1);
for (auto x : v)if (bit[x].empty())
FOR(j,0,maxn / x)bit[x].push_back(0);
for (auto x : v)dp[i] = max(dp[i],get(x,a[i] / x - 1) + 1);
for (auto x : v)update(x,a[i] / x,dp[i]);
}
int ans = 0,id;
FOR(i,1,n)if (ans < dp[i]){
ans = dp[i];
id = i;
}
vector<int> res;
res.push_back(id);
FOD(i,1,id - 1)if (a[i] < a[id] && dp[id] - 1 == dp[i] && __gcd(a[i],a[id]) > d){
res.push_back(i);
id = i;
}
reverse(ALL(res));
cout << ans << '\n';
for (auto x : res)cout << x << ' ';
return 0^0;
}
Ly8jcHJhZ21hIEdDQyBvcHRpbWl6ZSgiT2Zhc3QiKQovLyNwcmFnbWEgR0NDIHRhcmdldCgiYXZ4LGF2eDIsZm1hIikKI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBNT0QgMTAwMDAwMDAwNwojZGVmaW5lIEZPUihpLGEsYikgZm9yIChpbnQgaSA9IChhKTtpIDw9IChiKTtpKyspCiNkZWZpbmUgRk9EKGksYSxiKSBmb3IgKGludCBpID0gKGIpO2kgPj0gKGEpO2ktLSkKI2RlZmluZSBBTEwoeCkgKHgpLmJlZ2luKCksKHgpLmVuZCgpCiNkZWZpbmUgaWkgcGFpcjxpbnQsaW50PgojZGVmaW5lIGlpaSBwYWlyPGludCxwYWlyPGludCxpbnQ+PgovL2NvbnN0IGludCBNT0QgPSA5OTgyNDQ4NTM7CmNvbnN0IGludCBNQVhOID0gMmU1ICsgNzsKY29uc3QgaW50IG1heG4gPSAxZTcgKyA3OwppbnQgYVtNQVhOXSxkcFtNQVhOXSxUcnlbTUFYTl0scHJpbWVbbWF4bl07CnZvaWQgc2lldmUoKXsKICAgIEZPUihpLDIsbWF4biAtIDEpaWYgKCFwcmltZVtpXSl7CiAgICAgICAgcHJpbWVbaV0gPSBpOwogICAgICAgIGZvciAobGwgaiA9IDFsbCAqIGkgKiBpO2ogPD0gbWF4bjtqKz1pKXByaW1lW2pdID0gaTsKICAgIH0KfQp2ZWN0b3I8aW50PiBiaXRbbWF4bl07CnZvaWQgdXBkYXRlKGludCBpZCxpbnQgeCxpbnQgdil7CiAgICBpbnQgbGVuID0gbWF4biAvIGlkOwogICAgZm9yICg7eCA8PSBsZW47eCs9eCYteCliaXRbaWRdW3hdID0gbWF4KGJpdFtpZF1beF0sdik7Cn0KaW50IGdldChpbnQgaWQsaW50IHgpewogICAgaW50IGFucyA9IDA7CiAgICBmb3IgKDt4O3gtPXgmLXgpYW5zID0gbWF4KGFucyxiaXRbaWRdW3hdKTsKICAgIHJldHVybiBhbnM7Cn0KaW50IG1haW4oKXsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZSgwKTsgY291dC50aWUoMCk7CiAgICAvL2ZyZW9wZW4oIk1BWFJFQ1QuaW5wIiwiciIsc3RkaW4pOwogICAgLy9mcmVvcGVuKCJNQVhSRUNULm91dCIsInciLHN0ZG91dCk7CiAgICBzaWV2ZSgpOwogICAgaW50IG4sZDtjaW4gPj4gbiA+PiBkOwogICAgRk9SKGksMSxuKWNpbiA+PiBhW2ldOwogICAgRk9SKGksMSxuKXsKICAgICAgICBkcFtpXSA9IDE7CiAgICAgICAgaW50IHQgPSBhW2ldOwogICAgICAgIHZlY3RvcjxpbnQ+IHY7CiAgICAgICAgd2hpbGUodCA+IDEpewogICAgICAgICAgICBpbnQgcCA9IHByaW1lW3RdOwogICAgICAgICAgICB3aGlsZSh0ICUgcCA9PSAwKXQgPSB0IC8gcDsKICAgICAgICAgICAgdi5wdXNoX2JhY2socCk7CiAgICAgICAgfQogICAgICAgIGlmICghZCl2LnB1c2hfYmFjaygxKTsKICAgICAgICBmb3IgKGF1dG8geCA6IHYpaWYgKGJpdFt4XS5lbXB0eSgpKQogICAgICAgIEZPUihqLDAsbWF4biAvIHgpYml0W3hdLnB1c2hfYmFjaygwKTsKICAgICAgICBmb3IgKGF1dG8geCA6IHYpZHBbaV0gPSBtYXgoZHBbaV0sZ2V0KHgsYVtpXSAvIHggLSAxKSArIDEpOwogICAgICAgIGZvciAoYXV0byB4IDogdil1cGRhdGUoeCxhW2ldIC8geCxkcFtpXSk7CiAgICB9CiAgICBpbnQgYW5zID0gMCxpZDsKICAgIEZPUihpLDEsbilpZiAoYW5zIDwgZHBbaV0pewogICAgICAgIGFucyA9IGRwW2ldOwogICAgICAgIGlkID0gaTsKICAgIH0KICAgIHZlY3RvcjxpbnQ+IHJlczsKICAgIHJlcy5wdXNoX2JhY2soaWQpOwogICAgRk9EKGksMSxpZCAtIDEpaWYgKGFbaV0gPCBhW2lkXSAmJiBkcFtpZF0gLSAxID09IGRwW2ldICYmIF9fZ2NkKGFbaV0sYVtpZF0pID4gZCl7CiAgICAgICAgcmVzLnB1c2hfYmFjayhpKTsKICAgICAgICBpZCA9IGk7CiAgICB9CiAgICByZXZlcnNlKEFMTChyZXMpKTsKICAgIGNvdXQgPDwgYW5zIDw8ICdcbic7CiAgICBmb3IgKGF1dG8geCA6IHJlcyljb3V0IDw8IHggPDwgJyAnOwogICAgcmV0dXJuIDBeMDsKfQ==