#include <bits/stdc++.h>
using namespace std;
const int NMAX = 300000;
const int LOGN = 22;
int V[LOGN];
int Lmost[NMAX][LOGN], Rmost[NMAX][LOGN];
int dpL[1 << LOGN], dpR[1 << LOGN];
int arr[NMAX + 1];
int dp[NMAX + 2];
int main() {
  int N;
  scanf("%d%d", &N, &V[0]);
  for (int i = 1; i <= N; i++) scanf("%d", arr + i);
  int M = 1;
  while (V[M - 1]) {
    V[M] = V[M - 1] / 2;
    M++;
  }
  for (int i = 0; i < M; i++) {
    int v = V[i];
    int j = 1;
    while (j <= N) {
      int k = j + 1;
      while (k <= N && arr[k] - arr[k - 1] <= v) k++;
      for (int x = j; x < k; x++) Rmost[x][i] = k - 1;
      j = k;
    }
    j = N;
    while (j >= 1) {
      int k = j - 1;
      while (k >= 1 && arr[k + 1] - arr[k] <= v) k--;
      for (int x = j; x > k; x--) Lmost[x][i] = k + 1;
      j = k;
    }
  }
  for (int i = 0; i < (1 << M); i++) dpR[i] = N + 1;
  for (int i = 1; i < (1 << M); i++) {
    for (int j = 0; j < M; j++)
      if (i & (1 << j)) {
        int L = dpL[i ^ (1 << j)];
        dpL[i] = max(dpL[i], Rmost[L + 1][j]);
        int R = dpR[i ^ (1 << j)];
        dpR[i] = min(dpR[i], Lmost[R - 1][j]);
      }
  }
  for (int i = 0; i <= N + 1; i++) dp[i] = -1;
  for (int i = 2; i < (1 << M); i += 2) {
    int j = ((1 << M) - 1) ^ i ^ 1;
    dp[dpR[j]] = max(dp[dpR[j]], dpL[i]);
  }
  for (int i = 1; i <= N + 1; i++) dp[i] = max(dp[i], dp[i - 1]);
  for (int i = 1; i <= N; i++) {
    int L = Lmost[i][0], R = Rmost[i][0];
    int det = dp[R + 1];
    if (det >= L - 1)
      printf("Possible\n");
    else
      printf("Impossible\n");
  }
}
