#include <bits/stdc++.h>
using namespace std;
namespace INPUT {
const int L = 1 << 15;
char _buf[L], *S, *T, c;
char _gc() {
  if (S == T) {
    T = (S = _buf) + fread(_buf, 1, L, stdin);
    if (S == T) return EOF;
  }
  return *S++;
}
void readi(int &X) {
  register bool flag;
  for (c = _gc(); (c < '0' || c > '9') && c != '-'; c = _gc())
    ;
  if (c == '-')
    X = 0, flag = true;
  else
    X = c & 15, flag = false;
  for (c = _gc(); c >= '0' && c <= '9'; X = X * 10 + (c & 15), c = _gc())
    ;
  if (flag) X = -X;
}
}  // namespace INPUT
using INPUT::readi;
const int Maxn = 2E5 + 5;
int N, M, V;
int a[Maxn];
int F[Maxn], G[Maxn];
int L[20][Maxn], R[20][Maxn];
int nxt[Maxn];
inline void MIN(int &x, int y) {
  if (x > y) x = y;
}
inline void MAX(int &x, int y) {
  if (x < y) x = y;
}
int main() {
  readi(N), readi(V);
  while (V >> M) ++M;
  for (int i = 1; i <= N; ++i) readi(a[i]);
  for (int i = 0; i <= M; ++i) {
    L[i][1] = 1;
    for (int j = 2; j <= N; ++j)
      if (a[j] - a[j - 1] > (V >> i)) L[i][j] = j;
    for (int j = 2; j <= N; ++j)
      if (L[i][j] == 0) L[i][j] = L[i][j - 1];
    R[i][N] = N;
    for (int j = N - 1; j >= 1; --j)
      if (a[j + 1] - a[j] > (V >> i)) R[i][j] = j;
    for (int j = N - 1; j >= 1; --j)
      if (R[i][j] == 0) R[i][j] = R[i][j + 1];
  }
  G[0] = N + 1;
  for (int i = 1; i < (1 << M); ++i) {
    G[i] = N + 1;
    for (int j = 0; j < M; ++j)
      if ((i >> j) & 1)
        MAX(F[i], R[M - j][min(F[i - (1 << j)] + 1, N)]),
            MIN(G[i], L[M - j][max(G[i - (1 << j)] - 1, 1)]);
  }
  for (int i = 0; i < (1 << M); ++i) MAX(nxt[G[(1 << M) - i - 1]], F[i]);
  for (int i = 1; i <= N + 1; ++i) MAX(nxt[i], nxt[i - 1]);
  for (int i = 1; i <= N; ++i)
    if (nxt[R[0][i] + 1] >= L[0][i] - 1)
      puts("Possible");
    else
      puts("Impossible");
  return 0;
}
