#include <bits/stdc++.h>
using namespace std;
const int MN = 200010;
int N, V;
int X[MN], prec1[17][MN], prec2[17][MN];
vector<int> P;
int cc1[1 << 17];
int dp1(int mask) {
  int &ret = cc1[mask];
  if (ret != -1) return ret;
  ret = 0;
  for (int i = 0; i < 17; i++) {
    if (mask & (1 << i)) {
      int t = dp1(mask ^ (1 << i));
      if (t == N) return ret = N;
      ret = max(ret, t + prec1[i][t]);
    }
  }
  return ret;
}
int cc2[1 << 17];
int dp2(int mask) {
  int &ret = cc2[mask];
  if (ret != -1) return ret;
  ret = 0;
  for (int i = 0; i < 17; i++) {
    if (mask & (1 << i)) {
      int t = dp2(mask ^ (1 << i));
      if (t == N) return ret = N;
      ret = max(ret, t + prec2[i][N - 1 - t]);
    }
  }
  return ret;
}
int main() {
  scanf("%d %d", &N, &V);
  while (1) {
    P.push_back(V);
    if (!V) break;
    V /= 2;
  }
  reverse(P.begin(), P.end());
  for (int i = 0; i < N; i++) {
    scanf("%d", &X[i]);
  }
  for (int i = 0; i < P.size(); i++) {
    for (int j = N - 1; j >= 0; j--) {
      prec1[i][j] = 1;
      if (j != N - 1 && X[j + 1] - X[j] <= P[i]) prec1[i][j] += prec1[i][j + 1];
    }
    for (int j = 0; j < N; j++) {
      prec2[i][j] = 1;
      if (j && X[j] - X[j - 1] <= P[i]) prec2[i][j] += prec2[i][j - 1];
    }
  }
  memset(cc1, -1, sizeof(cc1));
  memset(cc2, -1, sizeof(cc2));
  int b = P.size();
  if (dp1((1 << b) - 1) < N) {
    for (int i = 0; i < N; i++) {
      printf("Impossible\n");
    }
    return 0;
  }
  int pos = 0;
  while (pos < N) {
    int nxt = pos + prec1[b - 1][pos];
    bool ok = false;
    for (int mask = 0; mask < (1 << (b - 1)); mask++) {
      if (dp1(mask) >= pos && dp2(((1 << (b - 1)) - 1) ^ mask) >= N - nxt) {
        ok = true;
        break;
      }
    }
    for (int i = pos; i < nxt; i++) {
      if (ok)
        printf("Possible\n");
      else
        printf("Impossible\n");
    }
    pos = nxt;
  }
}
