#include <bits/stdc++.h>
int dirx[8] = {0, 1, 0, -1, 1, 1, -1, -1};
int diry[8] = {1, 0, -1, 0, 1, -1, 1, -1};
const int INF = 1e9 + 7;
const long long INFLL = 1e16;
const double EPS = 1e-6;
using namespace std;
const int maxn = 5e5 + 5;
int n, v;
int loc[maxn];
int jump[maxn][20], m;
int dp[maxn];
int ch[maxn];
int in_q[maxn];
queue<int> q;
int solve() {
  memset(dp, -1, sizeof dp);
  memset(in_q, 0, sizeof in_q);
  q.push(1);
  dp[1] = ch[0];
  in_q[1] = 1;
  while (q.size()) {
    int mask = q.front();
    int a = dp[mask];
    q.pop();
    in_q[mask] = 0;
    if (a == n) return 1;
    for (int k = (int)0; k < (int)m; k++)
      if (((1 << k) & mask) == 0) {
        int b = ch[jump[a][k]];
        int maskb = (mask | (1 << k));
        if (dp[maskb] < b) {
          dp[maskb] = b;
          if (!in_q[maskb]) q.push(maskb), in_q[maskb] = 1;
        }
      }
  }
  return 0;
}
int main() {
  scanf("%d%d", &n, &v);
  for (int k = (int)0; k < (int)n; k++) scanf("%d", &loc[k]);
  for (; v >= 0; v /= 2) {
    for (int k = (int)0; k < (int)n; k++) {
      int i = k;
      while (i < n) {
        if (i < n - 1 && loc[i + 1] - loc[i] <= v) {
          i++;
        } else
          break;
      }
      while (k <= i) jump[k++][m] = i + 1;
      k = i;
    }
    m++;
    if (v == 0) break;
  }
  if (m >= 20) return 0;
  for (int k = (int)0; k < (int)maxn; k++) ch[k] = k;
  int hit = 0;
  for (int k = (int)0; k < (int)n; k++) {
    if (hit > 18) {
      printf("Impossible\n");
      continue;
    }
    int nxt = jump[k][0];
    hit++;
    ch[k] = nxt;
    int ret = solve();
    ch[k] = k;
    while (k < nxt) printf("%s\n", ret ? "Possible" : "Impossible"), k++;
    k = nxt - 1;
  }
  return 0;
}
