#include <bits/stdc++.h>
using namespace std;
int x[220000], l[20][220000][2], f[220000][2], n, v, p[20][220000], cnt[20], k;
bool b[20];
int main() {
  scanf("%d%d", &n, &v);
  for (int i = 1; i <= n; ++i) scanf("%d", x + i);
  for (k = 0; v; ++k, v >>= 1) {
    cnt[k] = 1, l[k][1][0] = p[k][0] = p[k][1] = 1;
    for (int j = 2; j <= n; ++j) {
      if (x[j - 1] + v < x[j]) {
        l[k][cnt[k]][1] = j - 1, ++cnt[k];
        l[k][cnt[k]][0] = j;
      }
      p[k][j] = cnt[k];
    }
    l[k][cnt[k]][1] = n, p[k][n] = p[k][n + 1] = cnt[k];
  }
  cnt[k] = 0;
  for (int i = 1; i <= n; ++i)
    ++cnt[k], l[k][cnt[k]][0] = l[k][cnt[k]][1] = i, p[k][i] = i;
  ++k;
  if (cnt[0] > k) {
    for (int i = 0; i < n; ++i) printf("Impossible\n");
    return 0;
  }
  int tp = 1 << k;
  f[0][0] = 0, f[0][1] = n + 1;
  for (int i = 2; i < tp; i += 2) {
    f[i][0] = -1, f[i][1] = n << 1;
    for (int j = 1; j < k; ++j) {
      if (i & (1 << j)) {
        f[i][0] = max(f[i][0], l[j][p[j][f[i ^ (1 << j)][0] + 1]][1]);
        f[i][1] = min(f[i][1], l[j][p[j][f[i ^ (1 << j)][1] - 1]][0]);
      }
    }
  }
  tp -= 2;
  for (int i = 2; i <= tp; i += 2) {
    for (int j = 1; j <= cnt[1]; ++j) {
      if (f[i][0] + 1 >= l[0][j][0] && f[i ^ tp][1] - 1 <= l[0][j][1]) b[j] = 1;
    }
  }
  for (int i = 1; i <= n; ++i) {
    printf(b[p[0][i]] ? "Possible\n" : "Impossible\n");
  }
  return 0;
}
