#include <bits/stdc++.h>
using namespace std;
vector<int> G[220005];
int n, m, v, a[220005], r[21][220005], f[1 << 21], g[1 << 21], ufs[21][220005];
int find(int op, int x) {
  return ufs[op][x] ? ufs[op][x] = find(op, ufs[op][x]) : x;
}
int main() {
  int i, j, x, p, y, T;
  scanf("%d %d", &n, &v);
  for (i = v, m = 0; i; i >>= 1, m++)
    ;
  for (i = 1; i <= n; i++) scanf("%d", &a[i]);
  for (i = 0; i <= m; i++) {
    for (j = 1; j <= n; j++) r[i][j] = j;
    for (j = 1; j < n; j++)
      if (a[j + 1] - a[j] <= (v >> i))
        x = find(i, j), ufs[i][j + 1] = x, r[i][x] = j + 1;
  }
  for (i = 1; i < (1 << m); i++)
    for (j = 0; j < m; j++)
      if ((i >> j) & 1) {
        x = r[j + 1][find(j + 1, f[i ^ (1 << j)] + 1)];
        f[i] = max(f[i], x);
      }
  for (i = 0; i < (1 << m); i++) g[i] = n + 1;
  for (i = 1; i < (1 << m); i++)
    for (j = 0; j < m; j++)
      if ((i >> j) & 1) {
        x = find(j + 1, g[i ^ (1 << j)] - 1);
        g[i] = min(g[i], x);
      }
  T = (1 << m) - 1, p = 0, y = -100;
  for (i = 0; i <= T; i++) G[g[T ^ i]].push_back(f[i]);
  for (i = 1; i <= n; i++) {
    x = find(0, i);
    while (p <= r[0][x] + 1) {
      for (j = 0; j < G[p].size(); j++) y = max(y, G[p][j]);
      p++;
    }
    if (y < x - 1)
      printf("Impossible\n");
    else
      printf("Possible\n");
  }
  return 0;
}
