#include <bits/stdc++.h>
using namespace std;
int get() {
  char ch;
  while (ch = getchar(), (ch < '0' || ch > '9') && ch != '-')
    ;
  if (ch == '-') {
    int s = 0;
    while (ch = getchar(), ch >= '0' && ch <= '9') s = s * 10 + ch - '0';
    return -s;
  }
  int s = ch - '0';
  while (ch = getchar(), ch >= '0' && ch <= '9') s = s * 10 + ch - '0';
  return s;
}
const int N = 2e+5 + 5;
int n, V;
int a[N];
int lef[N][20], rig[N][20];
int val[20], k;
int f[N], g[N];
struct point {
  int x, y, id;
  point(const int x_ = 0, const int y_ = 0, const int id_ = 0) {
    x = x_;
    y = y_;
    id = id_;
  }
  friend bool operator<(point a, point b) {
    if (a.x != b.x) return a.x > b.x;
    if (a.y != b.y) return a.y < b.y;
    return a.id < b.id;
  }
} p[N * 2];
int m;
bool ans[N];
int main() {
  n = get();
  V = get();
  for (int i = 1; i <= n; i++) a[i] = get();
  val[0] = V;
  k = 0;
  for (; val[k]; k++) val[k + 1] = val[k] / 2;
  for (int i = 1; i <= n; i++)
    for (int j = 0; j <= k; j++) {
      lef[i][j] = i;
      if (i > 1 && a[i] - a[i - 1] <= val[j]) lef[i][j] = lef[i - 1][j];
    }
  for (int i = n; i >= 1; i--)
    for (int j = 0; j <= k; j++) {
      rig[i][j] = i;
      if (i < n && a[i + 1] - a[i] <= val[j]) rig[i][j] = rig[i + 1][j];
    }
  for (int i = 0; i <= (1 << k) - 1; i++) g[i] = 1e+9;
  f[0] = 0;
  g[0] = n + 1;
  for (int i = 1; i <= k; i++) {
    f[1 << (i - 1)] = rig[1][i];
    g[1 << (i - 1)] = lef[n][i];
  }
  for (int i = 1; i <= (1 << k) - 1; i++) {
    for (int x = 1; x <= k; x++)
      if (((1 << (x - 1)) & i) == 0) {
        if (f[i] == n)
          f[i | (1 << (x - 1))] = n;
        else
          f[i | (1 << (x - 1))] = max(f[i | (1 << (x - 1))], rig[f[i] + 1][x]);
        if (g[i] == 1)
          g[i | (1 << (x - 1))] = 1;
        else
          g[i | (1 << (x - 1))] = min(g[i | (1 << (x - 1))], lef[g[i] - 1][x]);
      }
  }
  for (int i = 1; i <= n; i++) p[++m] = point(lef[i][0], rig[i][0], i);
  for (int i = 0; i <= (1 << k) - 1; i++)
    p[++m] = point(f[i] + 1, g[((1 << k) - 1) ^ i] - 1, 0);
  sort(p + 1, p + 1 + m);
  int lim = 1e+9;
  for (int i = 1; i <= m; i++)
    if (p[i].id == 0)
      lim = min(lim, p[i].y);
    else
      ans[p[i].id] = (lim <= p[i].y);
  for (int i = 1; i <= n; i++)
    if (ans[i])
      printf("Possible\n");
    else
      printf("Impossible\n");
  return 0;
}
