#include <bits/stdc++.h>
using namespace std;
int kano() {
  char ch = getchar();
  int w = 0, u = 1;
  for (; ch < '0' || ch > '9'; ch = getchar())
    if (ch == '-') u = -1;
  for (; ch >= '0' && ch <= '9'; ch = getchar()) w = w * 10 + ch - '0';
  return w * u;
}
int n, v, o, u, mx;
int a[200005];
int p[21][200005], r[21][200005];
int f[2][262145];
bool bo[200005];
int main() {
  n = kano();
  v = kano();
  for (int i = 1; i <= n; i++) a[i] = kano();
  for (o = v, u = 0; o > 0; o = o >> 1, u++) {
    int la = 1;
    p[u][1] = 1;
    r[u][1] = 1;
    for (int i = 2; i <= n; i++) {
      if (a[i] - a[i - 1] <= o) {
        p[u][la] = i;
        r[u][i] = la;
      } else {
        la = i;
        p[u][la] = i;
        r[u][i] = la;
      }
    }
  }
  for (int i = 1; i <= n; i++) p[u][i] = r[u][i] = i;
  mx = 1 << u;
  mx--;
  for (int i = 0; i <= mx; i++) {
    if (f[0][i] > n) f[0][i] = n;
    for (int j = 1, l = 1; j <= mx; j = j << 1, l++) {
      if (i & j) continue;
      f[0][i | j] = max(f[0][i | j], p[l][r[l][f[0][i] + 1]]);
    }
  }
  for (o = v >> 1, u = 1; o > 0; o = o >> 1, u++) {
    int la = n;
    p[u][n] = n;
    r[u][n] = n;
    for (int i = n - 1; i >= 1; i--) {
      if (a[i + 1] - a[i] <= o) {
        p[u][la] = i;
        r[u][i] = la;
      } else {
        la = i;
        p[u][la] = i;
        r[u][i] = la;
      }
    }
  }
  for (int i = 1; i <= n; i++) p[u][i] = r[u][i] = i;
  for (int i = 0; i <= mx; i++) f[1][i] = n + 1;
  for (int i = 0; i <= mx; i++) {
    if (f[1][i] < 1) f[1][i] = 1;
    for (int j = 1, l = 1; j <= mx; j = j << 1, l++) {
      if (i & j) continue;
      f[1][i | j] = min(f[1][i | j], p[l][r[l][f[1][i] - 1]]);
    }
  }
  for (int i = 0; i <= mx; i++) {
    int j = ~i & mx;
    if (r[0][f[0][i] + 1] == r[0][f[1][j] - 1]) bo[r[0][f[0][i] + 1]] = 1;
  }
  for (int i = 1; i <= n; i++) {
    if (bo[r[0][i]])
      puts("Possible");
    else
      puts("Impossible");
  }
}
