#include <bits/stdc++.h>
using namespace std;
const int N = 200005;
int n, v, g[N * 2], f[N * 2], bin[25], tot, len[25], lef[25][N], rig[25][N],
    a[N], bel[N], p1[N], p2[N];
bool ans[N];
int read() {
  int x = 0, f = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  return x * f;
}
void dp() {
  bin[0] = 1;
  for (int i = 1; i <= tot; i++) bin[i] = bin[i - 1] * 2;
  for (int i = 0; i < bin[tot]; i++) g[i] = n + 1;
  for (int i = 0; i < bin[tot]; i++)
    for (int j = 0; j <= tot; j++)
      if (!(i & bin[j]))
        f[i + bin[j]] = max(f[i + bin[j]], rig[j][f[i] + 1]),
              g[i + bin[j]] = min(g[i + bin[j]], lef[j][g[i] - 1]);
  for (int i = 0; i < bin[tot]; i++) {
    int l = f[i], r = g[i ^ (bin[tot] - 1)];
    if (l + 1 >= r) {
      for (int j = 1; j <= n; j++) ans[j] = 1;
      return;
    }
    if (p1[bel[l + 1]] <= l + 1 && p2[bel[l + 1]] >= r - 1) ans[bel[l + 1]] = 1;
  }
}
int main() {
  n = read();
  v = read();
  for (int i = 1; i <= n; i++) a[i] = read();
  tot = 0;
  len[0] = 0;
  while (v) len[++tot] = v, v >>= 1;
  sort(len, len + tot + 1);
  memset(lef, 0x3f3f3f3f, sizeof(lef));
  for (int i = 0; i < tot; i++)
    for (int j = 1; j <= n; j++) {
      int l = j;
      while (l < n && a[l + 1] - a[l] <= len[i]) l++;
      rig[i][j] = l;
      lef[i][l] = j;
      j = l;
    }
  int id = 0;
  for (int j = 1; j <= n; j++) {
    int l = j;
    bel[j] = ++id;
    while (l < n && a[l + 1] - a[l] <= len[tot]) l++, bel[l] = id;
    p1[id] = j;
    p2[id] = l;
    j = l;
  }
  dp();
  for (int i = 1; i <= n; i++) puts(ans[bel[i]] ? "Possible" : "Impossible");
  return 0;
}
