#include <bits/stdc++.h>
using namespace std;
const int maxn = 200010;
int n, v, m;
int a[maxn];
int f[maxn], g[maxn];
int Next[maxn][20], pre[maxn][20];
void chkmax(int& x, int y) {
  if (x < y) x = y;
}
void chkmin(int& x, int y) {
  if (x > y) x = y;
}
int Log[maxn];
void init() {
  for (int i = 2; i < maxn; i++) Log[i] = Log[i >> 1] + 1;
}
int fa[maxn];
int find(int x) { return x == fa[x] ? x : fa[x] = find(fa[x]); }
int ans[maxn], b[maxn];
int main() {
  init();
  scanf("%d%d", &n, &v);
  int t = v;
  b[++m] = t;
  while (t) {
    b[++m] = t / 2;
    t /= 2;
  }
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
  for (int j = 1; j <= m; j++) {
    for (int i = 1; i <= n; i++) fa[i] = i;
    for (int i = 1; i < n; i++)
      if (a[i + 1] - a[i] <= b[j]) fa[find(i)] = find(i + 1);
    for (int i = 1; i <= n; i++) Next[i][j] = find(i);
    for (int i = 1; i <= n; i++) fa[i] = i;
    for (int i = 1; i < n; i++)
      if (a[i + 1] - a[i] <= b[j]) fa[find(i + 1)] = find(i);
    for (int i = 1; i <= n; i++) pre[i][j] = find(i);
  }
  for (int i = 0; i < (1 << m); i++)
    for (int j = 1; j <= m; j++)
      if (!(i & (1 << (j - 1)))) {
        chkmax(f[i | (1 << (j - 1))], Next[f[i] + 1][j]);
      }
  for (int i = 0; i < (1 << m); i++) g[i] = n + 1;
  for (int i = 0; i < (1 << m); i++)
    for (int j = 1; j <= m; j++)
      if (!(i & (1 << (j - 1))))
        chkmin(g[i | (1 << (j - 1))], pre[g[i] - 1][j]);
  for (int i = 0; i < (1 << m); i++) {
    if ((i & 1)) continue;
    int j = ((1 << m) - 1) ^ i ^ 1;
    int l = 1, r = Next[l][1];
    while (l <= n) {
      if (f[i] >= l - 1 && g[j] <= r + 1)
        for (int k = l; k <= r; k++) ans[k] = 1;
      l = r + 1, r = Next[l][1];
    }
  }
  for (int i = 1; i <= n; i++)
    printf("%s\n", ans[i] ? "Possible" : "Impossible");
  return 0;
}
