#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9 + 2e6;
int v[200005], n, m;
int d[200005], up[200005][21], down[200005][21], pre[1 << 21], suf[1 << 21];
int visit[200005];
int read() {
  char c = getchar();
  int x = 0, s = 1;
  while (!isdigit(c)) {
    if (c == '-') s = -1;
    c = getchar();
  }
  while (isdigit(c)) {
    x = (x << 3) + (x << 1) + c - '0';
    c = getchar();
  }
  return x * s;
}
void init() {
  while (v[++m] >= 1) v[m + 1] = v[m] >> 1;
  d[0] = -INF;
  d[n + 1] = INF;
  for (int j = 1; j <= m; ++j) {
    up[1][j] = 1;
    down[n][j] = n;
    for (int i = 2; i <= n; ++i)
      if (d[i] - d[i - 1] <= v[j])
        up[i][j] = up[i - 1][j];
      else
        up[i][j] = i;
    for (int i = n - 1; i >= 1; --i)
      if (d[i + 1] - d[i] <= v[j])
        down[i][j] = down[i + 1][j];
      else
        down[i][j] = i;
  }
}
void solve() {
  memset(suf, 0x3f, sizeof(suf));
  memset(pre, -0x3f, sizeof(pre));
  suf[0] = n + 1;
  pre[0] = 0;
  int limit = (1 << m) - 1;
  for (int s = 0; s <= limit; ++s) {
    for (int i = 1; i <= m; ++i) {
      if (s >> (i - 1) & 1) continue;
      int t = s | (1 << (i - 1));
      if (pre[s] >= 0) pre[t] = max(pre[t], down[pre[s] + 1][i]);
      if (suf[s] <= n + 1) suf[t] = min(suf[t], up[suf[s] - 1][i]);
    }
  }
  for (int s = 1; s < limit; ++s) {
    if (s & 1) continue;
    int t = limit ^ s ^ 1;
    int a = up[suf[t] - 1][1], b = down[pre[s] + 1][1];
    if (a <= b) {
      ++visit[a];
      --visit[b + 1];
    }
  }
  for (int i = 1; i <= n; ++i) visit[i] = visit[i - 1] + visit[i];
  for (int i = 1; i <= n; ++i)
    if (visit[i])
      puts("Possible");
    else
      puts("Impossible");
}
int main() {
  n = read();
  v[1] = read();
  for (int i = 1; i <= n; ++i) d[i] = read();
  init();
  solve();
}
