#include <bits/stdc++.h>
using namespace std;
const int N = 300005;
int dpL[N], dpR[N];
int R[20][N], L[20][N];
int d[N];
int S[20];
int a[N];
int sum[N];
int n, v;
int p;
int id[N];
int main() {
  scanf("%d%d", &n, &v);
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
  for (int i = 1; i < n; i++) {
    d[i] = a[i + 1] - a[i];
    if (d[i] > v) id[i]++;
  }
  for (int i = 1; i < n; i++) {
    id[i] += id[i - 1];
  }
  S[0] = v;
  for (int i = 1; i <= 18; i++) {
    S[i] = S[i - 1] / 2;
    if (S[i] == 0) {
      p = i + 1;
      break;
    }
  }
  reverse(S, S + p);
  for (int i = 0; i < p; i++) {
  }
  for (int i = 0; i < p; i++) {
    R[i][n] = n;
    for (int j = n - 1; j >= 1; j--) {
      R[i][j] = a[j + 1] - a[j] <= S[i] ? R[i][j + 1] : j;
    }
    L[i][1] = 1;
    for (int j = 2; j <= n; j++) {
      L[i][j] = a[j] - a[j - 1] <= S[i] ? L[i][j - 1] : j;
    }
  }
  int LIM = (1 << (p - 1)) - 1;
  for (int i = 0; i <= LIM; i++) {
    dpR[i] = n + 1;
    for (int j = 0; j < p; j++) {
      if (i >> j & 1) {
        dpL[i] = max(dpL[i], R[j][dpL[i ^ (1 << j)] + 1]);
        dpR[i] = min(dpR[i], L[j][dpR[i ^ (1 << j)] - 1]);
      }
    }
  }
  for (int i = 0; i <= LIM; i++) {
    int LL = dpL[i];
    int RR = dpR[LIM ^ i];
    if (RR <= LL) {
      for (int i = 1; i <= n; i++) printf("Possible\n");
      return 0;
    }
    if (id[RR - 2] == id[LL]) {
      sum[LL + 1]++;
      sum[RR]--;
    }
  }
  for (int i = 1; i <= n; i++) {
    sum[i] += sum[i - 1];
    if (sum[i] > 0) {
      printf("Possible\n");
    } else {
      printf("Impossible\n");
    }
  }
}
