#include <bits/stdc++.h>
using namespace std;
const int INF = 1012345678;
int A[200005];
int S[20];
int sizeS = 0;
int R[20][200005];
int L[20][200005];
bool boleh[200005];
int minPos[200005];
int minPos2[200005];
int dpL[(1 << 19) + 5];
int dpR[(1 << 19) + 5];
int N, V;
int main() {
  scanf("%d%d", &N, &V);
  for (int i = 1; i <= N; i++) {
    scanf("%d", &A[i]);
  }
  int temp = V;
  while (true) {
    S[sizeS++] = temp;
    if (temp == 0) {
      break;
    }
    temp >>= 1;
  }
  reverse(S, S + sizeS);
  for (int i = 0; i < sizeS; i++) {
  }
  for (int i = 0; i < sizeS; i++) {
    R[i][N] = N;
    L[i][1] = 1;
    for (int j = 2; j <= N; j++) {
      if (A[j] - A[j - 1] <= S[i]) {
        L[i][j] = L[i][j - 1];
      } else {
        L[i][j] = j;
      }
    }
    for (int j = N - 1; j >= 1; j--) {
      if (A[j + 1] - A[j] <= S[i]) {
        R[i][j] = R[i][j + 1];
      } else {
        R[i][j] = j;
      }
    }
  }
  for (int i = 0; i < (1 << sizeS); i++) {
    dpL[i] = 0;
    dpR[i] = N + 1;
    for (int j = 0; j < sizeS; j++) {
      if (i & (1 << j)) {
        int k = i ^ (1 << j);
        dpL[i] = max(dpL[i], R[j][min(dpL[k] + 1, N)]);
        dpR[i] = min(dpR[i], L[j][max(dpR[k] - 1, 1)]);
      }
    }
  }
  int k = 1;
  for (int i = 1; i <= N; i++) {
    minPos[i] = INF;
  }
  for (int i = 0; i < (1 << (sizeS - 1)); i++) {
    int j = (1 << (sizeS - 1)) - 1 - i;
    int l = dpL[i];
    int r = dpR[j];
    minPos[l] = min(minPos[l], r);
  }
  minPos2[N] = minPos[N];
  for (int i = N - 1; i >= 0; i--) {
    minPos2[i] = min(minPos2[i + 1], minPos[i]);
  }
  for (int i = 1; i <= N; i++) {
    int l = L[sizeS - 1][i];
    int r = R[sizeS - 1][i];
    boleh[i] = minPos2[l - 1] <= r + 1;
    if (boleh[i]) {
      printf("Possible\n");
    } else {
      printf("Impossible\n");
    }
  }
  return 0;
}
