#include <bits/stdc++.h>
using namespace std;
const int N = 200010;
int n, p, V, X[N];
int tor[N][20], tol[N][20];
int dpl[N], dpr[N], cnt[N];
int main() {
  scanf("%d%d", &n, &V);
  for (int i = 1; i <= n; i++) scanf("%d", &X[i]);
  X[0] = -2e9, X[n + 1] = 2e9;
  for (int i = 0; i <= 19; i++) {
    int l = 1;
    for (int j = 1; j <= n; j++)
      if (1ll * X[j + 1] - X[j] > V) {
        for (int k = l; k <= j; k++) tol[k][i] = l, tor[k][i] = j;
        l = j + 1;
      }
    if (!V) {
      p = i;
      break;
    }
    V >>= 1;
  }
  int S = (1 << p) - 1;
  dpl[0] = 0;
  for (int i = 1; i <= S; i++) {
    dpl[i] = 0;
    for (int j = 1; j <= p; j++)
      if (i & (1 << (j - 1)))
        dpl[i] = max(dpl[i], tor[dpl[i ^ (1 << (j - 1))] + 1][j]);
  }
  dpr[0] = n + 1;
  for (int i = 1; i <= S; i++) {
    dpr[i] = n + 1;
    for (int j = 1; j <= p; j++)
      if (i & (1 << (j - 1)))
        dpr[i] = min(dpr[i], tol[dpr[i ^ (1 << (j - 1))] - 1][j]);
  }
  for (int i = 0; i <= S; i++) {
    int L = dpl[i] + 1, R = dpr[S ^ i] - 1;
    if (tor[L][0] >= R) cnt[tol[L][0]]++, cnt[tor[R][0] + 1]--;
  }
  for (int i = 1; i <= n; i++) {
    cnt[i] += cnt[i - 1];
    if (cnt[i])
      puts("Possible");
    else
      puts("Impossible");
  }
  return 0;
}
