#include <bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f;
const int Maxn = (1 << 21) + 5;
const int N = 2e5 + 5;
const int M = 22;
int read() {
  int s = 0, f = 1;
  char c = getchar();
  while (c < '0' || c > '9') {
    if (c == '-') f = -1;
    c = getchar();
  }
  while (c >= '0' && c <= '9') {
    s = s * 10 + c - '0';
    c = getchar();
  }
  return s * f;
}
pair<int, int> P[N];
int n, V, cnt, tot, Sta, a[N], L[N][M], R[N][M], Ans[N], FL[Maxn], FR[Maxn];
int main() {
  n = read();
  V = read();
  for (int i = 1; i <= n; i++) a[i] = read();
  a[0] = -inf;
  a[n + 1] = inf;
  for (int v = V;; v >>= 1) {
    tot++;
    L[tot][0] = 0;
    R[tot][n + 1] = n + 1;
    for (int i = 1; i <= n; i++)
      L[tot][i] = (a[i] - a[i - 1] <= v ? L[tot][i - 1] : i);
    for (int i = n; i >= 1; i--)
      R[tot][i] = (a[i + 1] - a[i] <= v ? R[tot][i + 1] : i);
    if (v == 0) break;
  }
  Sta = (1 << tot) - 1;
  for (int i = 1; i <= n; i++) P[i] = make_pair(L[1][i], R[1][i]);
  sort(P + 1, P + n + 1);
  cnt = unique(P + 1, P + n + 1) - P - 1;
  for (int S = 0; S <= Sta; S++) {
    FL[S] = 0;
    FR[S] = n + 1;
  }
  for (int S = 0; S <= Sta; S++) {
    for (int i = 1; i <= tot; i++) {
      if (!((S >> (i - 1)) & 1)) continue;
      FL[S] = max(FL[S], R[i][FL[S ^ (1 << (i - 1))] + 1]);
      FR[S] = min(FR[S], L[i][FR[S ^ (1 << (i - 1))] - 1]);
    }
  }
  if (cnt > tot) {
    for (int i = 1; i <= tot; i++) puts("Impossible");
    return 0;
  }
  for (int i = 1; i <= cnt; i++) {
    for (int S = 0; S <= Sta; S += 2) {
      if (FL[S] >= P[i].first - 1 && FR[Sta ^ S ^ 1] <= P[i].second + 1) {
        for (int j = P[i].first; j <= P[i].second; j++) Ans[j] = 1;
        break;
      }
    }
  }
  for (int i = 1; i <= n; i++) puts(Ans[i] ? "Possible" : "Impossible");
  return 0;
}
