#include <bits/stdc++.h>
using namespace std;
inline char gc() {
  static char buf[100000], *p1 = buf, *p2 = buf;
  return p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 100000, stdin), p1 == p2)
             ? EOF
             : *p1++;
}
inline int read() {
  int x = 0;
  char ch = getchar();
  bool positive = 1;
  for (; !isdigit(ch); ch = getchar())
    if (ch == '-') positive = 0;
  for (; isdigit(ch); ch = getchar()) x = x * 10 + ch - '0';
  return positive ? x : -x;
}
inline void write(int a) {
  if (a < 0) {
    a = -a;
    putchar('-');
  }
  if (a >= 10) write(a / 10);
  putchar('0' + a % 10);
}
inline void writeln(int a) {
  if (a < 0) {
    a = -a;
    putchar('-');
  }
  write(a);
  puts("");
}
inline int rnd(int x) { return rand() % x; }
inline unsigned long long rnd() {
  return ((unsigned long long)rand() << 30 ^ rand()) << 4 | rand() % 4;
}
const int M = 18, N = 200005, inf = 1e9 + 3e5;
int n, v, gao, f[1 << M], g[1 << M], x[N], lst[M][N], nxt[M][N], tong[N];
int main() {
  n = read();
  v = read();
  x[0] = -inf;
  x[n + 1] = inf;
  for (int i = 1; i <= n; i++) x[i] = read();
  for (int i = 0;; i++) {
    int dali = v >> i;
    gao = i;
    nxt[i][n + 1] = n + 1;
    lst[i][0] = 0;
    for (int j = 1; j <= n; j++)
      if (x[j] - x[j - 1] <= dali)
        lst[i][j] = lst[i][j - 1];
      else
        lst[i][j] = j;
    for (int j = n; j; j--)
      if (x[j + 1] - x[j] <= dali)
        nxt[i][j] = nxt[i][j + 1];
      else
        nxt[i][j] = j;
    if ((v >> i) == 0) break;
  }
  f[0] = 0;
  g[0] = n + 1;
  for (int i = 1; i < (1 << gao); i++) {
    f[i] = 0;
    g[i] = n + 1;
    for (int j = 0; j < gao; j++)
      if (i >> j & 1) f[i] = max(f[i], nxt[j + 1][f[i ^ (1 << j)] + 1]);
    for (int j = 0; j < gao; j++)
      if (i >> j & 1) g[i] = min(g[i], lst[j + 1][g[i ^ (1 << j)] - 1]);
  }
  for (int i = 0; i <= n + 1; i++) tong[i] = -1;
  for (int i = 0; i < (1 << gao); i++) {
    int l = f[i], r = g[((1 << gao) - 1) ^ i];
    tong[r] = max(tong[r], l);
  }
  for (int i = 1; i <= n; i++) tong[i] = max(tong[i], tong[i - 1]);
  for (int i = 1; i <= n; i++) {
    int l = lst[0][i], r = nxt[0][i];
    puts(tong[r + 1] >= l - 1 ? "Possible" : "Impossible");
  }
}
