#include <bits/stdc++.h>
using namespace std;
vector<int> vals;
int rt[200005][30];
int lt[200005][30];
int n, v;
int pos[200005];
int memo1[300005];
int memo2[300005];
int something[200005];
int dpL(int bitmask) {
  if (memo1[bitmask] != -1) return memo1[bitmask];
  if (bitmask == 0) return memo1[bitmask] = -1;
  int ans = 0;
  for (int x = 0; x < vals.size(); x++) {
    if (bitmask & (1 << x)) {
      ans = max(ans, dpL(bitmask ^ (1 << x)));
      ans = max(ans, rt[dpL(bitmask ^ (1 << x)) + 1][x]);
    }
  }
  return memo1[bitmask] = ans;
}
int dpR(int bitmask) {
  if (memo2[bitmask] != -1) return memo2[bitmask];
  if (bitmask == 0) return memo2[bitmask] = n;
  int ans = n - 1;
  for (int x = 0; x < vals.size(); x++) {
    if (bitmask & (1 << x)) {
      ans = min(ans, dpR(bitmask ^ (1 << x)));
      ans = min(ans, lt[dpR(bitmask ^ (1 << x)) - 1][x]);
    }
  }
  return memo2[bitmask] = ans;
}
int main() {
  memset(memo1, -1, sizeof(memo1));
  memset(memo2, -1, sizeof(memo2));
  scanf("%d%d", &n, &v);
  for (int x = 0; x < n; x++) {
    scanf("%d", &pos[x]);
  }
  int t = v;
  while (t > 0) {
    vals.push_back(t);
    t /= 2;
  }
  vals.push_back(0);
  for (int i = 0; i < vals.size(); i++) {
    rt[n - 1][i] = n - 1;
    for (int x = n - 2; x >= 0; x--) {
      rt[x][i] = pos[x + 1] - pos[x] <= vals[i] ? rt[x + 1][i] : x;
    }
    lt[0][i] = 0;
    for (int x = 1; x < n; x++) {
      lt[x][i] = pos[x] - pos[x - 1] <= vals[i] ? lt[x - 1][i] : x;
    }
  }
  for (int x = 0; x < n; x++) {
    something[x] = n + 1;
  }
  for (int x = 0; x < (1 << (vals.size())); x += 2) {
    int other = ((1 << (vals.size())) - 2) ^ x;
    something[dpL(x)] = min(something[dpL(x)], dpR(other));
  }
  for (int x = n - 2; x >= 0; x--) {
    something[x] = min(something[x], something[x + 1]);
  }
  for (int x = 0; x < n; x++) {
    int L = lt[x][0];
    int R = rt[x][0];
    printf(something[max(0, L - 1)] <= R + 1 ? "Possible\n" : "Impossible\n");
  }
}
