#include <bits/stdc++.h>
using namespace std;
int IN() {
  int x = 0, f = 0, ch;
  for (; (ch = getchar()) < '0' || ch > '9';) f = (ch == '-');
  for (; ch >= '0' && ch <= '9'; (ch = getchar())) x = x * 10 + ch - '0';
  return f ? -x : x;
}
int N, M, C, U;
int A[200005], B[20];
int L[20][200005], R[20][200005];
int F[1 << 20], G[1 << 20];
int main(int argc, char* argv[]) {
  N = IN();
  M = IN();
  for (int i = (int)(1); i <= (int)(N); i++) A[i] = IN();
  B[C = 1] = M;
  for (; B[C];) C++, B[C] = B[C - 1] >> 1;
  for (int i = (int)(1); i <= (int)(C); i++) {
    L[i][1] = 1;
    for (int j = (int)(2); j <= (int)(N); j++)
      if (A[j] - A[j - 1] <= B[i])
        L[i][j] = L[i][j - 1];
      else
        L[i][j] = j;
    R[i][N] = N;
    for (int j = (int)(N - 1); j >= (int)(1); j--)
      if (A[j + 1] - A[j] <= B[i])
        R[i][j] = R[i][j + 1];
      else
        R[i][j] = j;
  }
  U = (1 << C) - 1;
  for (int s = (int)(0); s <= (int)(U); s++) {
    int x = F[s] + 1;
    for (int i = (int)(1); i <= (int)(C); i++)
      if (!((1 << (i - 1)) & s)) {
        int t = (1 << (i - 1)) ^ s;
        F[t] = max(F[t], F[s]);
        if (x <= N) F[t] = max(F[t], R[i][x]);
      }
  }
  for (int s = (int)(0); s <= (int)(U); s++) G[s] = N + 1;
  for (int s = (int)(0); s <= (int)(U); s++) {
    int x = G[s] - 1;
    for (int i = (int)(1); i <= (int)(C); i++)
      if (!((1 << (i - 1)) & s)) {
        int t = (1 << (i - 1)) ^ s;
        G[t] = min(G[t], G[s]);
        if (x >= 1) G[t] = min(G[t], L[i][x]);
      }
  }
  for (int i = (int)(1); i <= (int)(N); i++) {
    int l = L[1][i], r = R[1][i];
    int flag = 0;
    for (int s = (int)(0); s <= (int)(U); s++)
      if (!(s & 1)) {
        int t = U ^ 1 ^ s;
        if (F[s] >= l - 1 && G[t] <= r + 1) flag = 1;
      }
    puts(flag ? "Possible" : "Impossible");
  }
  return 0;
}
