#include <bits/stdc++.h>
int pre[200005][25], nxt[200005][25], dp_l[800005], dp_r[800005], arr[200005];
int main() {
  int n, v, len = 0;
  scanf("%d%d", &n, &v);
  for (int i = 1; i <= n; i++) scanf("%d", arr + i);
  while (true) {
    pre[0][len] = pre[1][len] = 0;
    for (int i = 2; i <= n; i++)
      pre[i][len] = arr[i] - arr[i - 1] <= v ? pre[i - 1][len] : i - 1;
    nxt[n + 1][len] = nxt[n][len] = n + 1;
    for (int i = n - 1; i >= 1; i--)
      nxt[i][len] = arr[i + 1] - arr[i] <= v ? nxt[i + 1][len] : i + 1;
    len++;
    if (!v) break;
    v >>= 1;
  }
  for (int i = 0; i < 1 << len; i++) {
    dp_l[i] = 1;
    dp_r[i] = n;
  }
  for (int i = 0; i < 1 << len; i++) {
    for (int j = 0; j < len; j++) {
      if (i & (1 << j)) continue;
      dp_l[i | (1 << j)] = std::max(dp_l[i | (1 << j)], nxt[dp_l[i]][j]);
      dp_r[i | (1 << j)] = std::min(dp_r[i | (1 << j)], pre[dp_r[i]][j]);
    }
  }
  if (dp_l[(1 << len) - 1] <= n) {
    for (int i = 0; i < n; i++) puts("Impossible");
    return 0;
  }
  for (int l = 1; l <= n; l = nxt[l][0]) {
    bool flg = false;
    for (int i = 0; i < 1 << len && !flg; i++) {
      if (i & 1) continue;
      if (l <= dp_l[i] && dp_r[(1 << len) - 1 ^ i ^ 1] <= nxt[l][0]) flg = true;
    }
    for (int i = l; i < nxt[l][0]; i++) puts(flg ? "Possible" : "Impossible");
  }
  return 0;
}
