#include <bits/stdc++.h>
using namespace std;
const int MaxN = 2e5 + 5;
int N, M = 1;
int V[20], X[MaxN], Mn[MaxN];
int L[MaxN][20], R[MaxN][20], F[1 << 18], G[1 << 18];
int main() {
  int i, j, l, r;
  scanf("%d%d", &N, &V[0]);
  for (i = V[0] >> 1; i; i >>= 1) V[M++] = i;
  M++;
  for (i = 1; i <= N; i++) scanf("%d", &X[i]);
  for (i = 0; i < M; i++) L[1][i] = 1, R[N][i] = N;
  for (i = 2; i <= N; i++)
    for (j = 0; j < M; j++)
      if (X[i] - X[i - 1] <= V[j])
        L[i][j] = L[i - 1][j];
      else
        L[i][j] = i - (j < M - 1);
  for (i = N - 1; i; i--)
    for (j = 0; j < M; j++)
      if (X[i + 1] - X[i] <= V[j])
        R[i][j] = R[i + 1][j];
      else
        R[i][j] = i + (j < M - 1);
  F[0] = 1;
  for (i = 0; i < 1 << M; i++) {
    if (!i)
      j = M;
    else
      for (j = 0; ~i >> j & 1; j++)
        ;
    for (j--; ~j; j--) F[i | 1 << j] = max(F[i | 1 << j], R[F[i]][j]);
  }
  memset(G, 0x3f, sizeof(G));
  G[0] = N;
  for (i = 0; i < 1 << M; i++) {
    if (!i)
      j = M;
    else
      for (j = 0; ~i >> j & 1; j++)
        ;
    for (j--; ~j; j--) G[i | 1 << j] = min(G[i | 1 << j], L[G[i]][j]);
  }
  memset(Mn, 0x3f, sizeof(Mn));
  for (i = 0; i < 1 << M; i++) Mn[F[i]] = min(Mn[F[i]], G[(1 << M) - 1 - i]);
  for (i = N - 1; i; i--) Mn[i] = min(Mn[i], Mn[i + 1]);
  for (i = 1; i <= N; i++)
    puts(Mn[L[i][0]] <= R[i][0] ? "Possible" : "Impossible");
  return 0;
}
