#include <bits/stdc++.h>
using namespace std;
int nxt[20][202020];
int bef[20][202020];
int dp1[402020], dp2[402020];
int d[202020];
int ans[202020];
int main() {
  int num, gen;
  scanf("%d%d", &num, &gen);
  d[0] = -1010101010, d[num + 1] = 1010101010;
  for (int i = 1; i <= num; i++) scanf("%d", &d[i]);
  int pt = 0;
  for (;;) {
    int now = 0;
    for (int i = 1; i <= num + 1; i++) {
      if (d[i] - d[i - 1] > gen) now = i - 1;
      bef[pt][i] = now;
    }
    bef[pt][0] = 0;
    now = num + 1;
    for (int i = num; i >= 0; i--) {
      if (d[i + 1] - d[i] > gen) now = i + 1;
      nxt[pt][i] = now;
    }
    nxt[pt][num + 1] = num + 1;
    pt++;
    if (gen == 0) break;
    gen /= 2;
  }
  fill(dp1, dp1 + (1 << pt), 1);
  for (int p = 0; p < (1 << pt); p++) {
    for (int i = 0; i < pt; i++) {
      if (p & (1 << i)) continue;
      dp1[p + (1 << i)] = max(dp1[p + (1 << i)], nxt[i][dp1[p]]);
    }
  }
  fill(dp2, dp2 + (1 << pt), num);
  for (int p = 0; p < (1 << pt); p++) {
    for (int i = 0; i < pt; i++) {
      if (p & (1 << i)) continue;
      dp2[p + (1 << i)] = min(dp2[p + (1 << i)], bef[i][dp2[p]]);
    }
  }
  for (int p = 0; p < (1 << pt); p += 2) {
    int q = (1 << pt) - 2 - p;
    if (nxt[0][dp1[p]] > dp2[q]) ans[dp1[p]] = 1;
  }
  int t = 0;
  for (;;) {
    if (ans[t]) {
      for (int j = t; j < nxt[0][t]; j++) ans[j] = 1;
      t = nxt[0][t];
    } else
      t++;
    if (t == num + 1) break;
  }
  t = num + 1;
  for (;;) {
    if (ans[t]) {
      for (int j = t; j > bef[0][t]; j--) ans[j] = 1;
      t = bef[0][t];
    } else
      t--;
    if (t == 0) break;
  }
  for (int i = 1; i <= num; i++) printf(ans[i] ? "Possible\n" : "Impossible\n");
}
