#include <bits/stdc++.h>
using namespace std;
const int N = 200010;
int n, V, X[N], dep;
int L[20][N], R[20][N];
int exL[N << 2], exR[N << 2];
pair<int, int> seg[N];
bool ans[N];
int findr(int d, int p) {
  return R[d][upper_bound(L[d] + 1, L[d] + 1 + n, p) - L[d] - 1];
}
int findl(int d, int p) {
  return L[d][lower_bound(R[d] + 1, R[d] + 1 + n, p) - R[d]];
}
int main() {
  scanf("%d%d", &n, &V);
  for (int i = 1; i <= n; i++) scanf("%d", X + i);
  for (int v = V; v >= 0; v >>= 1, dep++) {
    L[dep][1] = 1;
    R[dep][n] = n;
    for (int i = 2; i <= n; i++)
      L[dep][i] = (X[i] - X[i - 1] <= v) ? L[dep][i - 1] : i;
    for (int i = n - 1; i >= 1; i--)
      R[dep][i] = (X[i + 1] - X[i] <= v) ? R[dep][i + 1] : i;
    if (v == 0) {
      dep++;
      break;
    }
  }
  for (int i = 1; i <= n; i++) seg[i] = pair<int, int>(L[0][i], R[0][i]);
  int cnt = unique(seg + 1, seg + 1 + n) - (seg + 1);
  memset(exL, 0, sizeof(exL));
  memset(exR, 0x3f, sizeof(exR));
  exL[0] = 0;
  exR[0] = n;
  for (int s = 0; s < (1 << dep); s++)
    for (int i = 0; i < dep; i++) {
      if (!(s & (1 << i))) continue;
      exL[s] = max(exL[s], findr(i, exL[s ^ (1 << i)]));
      exR[s] = min(exR[s], findl(i, exR[s ^ (1 << i)]));
    }
  if (cnt > dep) goto output;
  for (int i = 1; i <= cnt; i++) {
    for (int s = 0; s < (1 << dep); s += 2)
      if (exL[s] >= seg[i].first - 1 && exR[s] <= seg[i].second + 1) {
        for (int j = seg[i].first; j <= seg[i].second; j++) ans[j] = 1;
        goto finished;
      }
  finished:;
  }
output:
  for (int i = 1; i <= n; i++) puts(ans[i] ? "Possible" : "Impossible");
  return 0;
}
