#include <bits/stdc++.h>
using namespace std;
long long pwr(long long base, long long p, long long mod = (1009LL)) {
  long long ans = 1;
  while (p) {
    if (p & 1) ans = (ans * base) % mod;
    base = (base * base) % mod;
    p /= 2;
  }
  return ans;
}
long long gcd(long long a, long long b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}
const int N = 200005;
int n, arr[N], sz, V, next_right[20][N], next_left[20][N];
int DP_left[1 << 20], DP_right[1 << 20];
vector<int> steps;
int dp_left(int mask) {
  int &ans = DP_left[mask];
  if (ans != -1) return ans;
  ans = 1;
  for (int i = 0; i < sz; i++)
    if ((mask >> i) & 1)
      ans = max(ans, next_right[i][dp_left(mask ^ (1 << i)) + 1]);
  return ans;
}
int dp_right(int mask) {
  int &ans = DP_right[mask];
  if (ans != -1) return ans;
  ans = n;
  for (int i = 0; i < sz; i++)
    if ((mask >> i) & 1)
      ans = min(ans, next_left[i][dp_right(mask ^ (1 << i)) - 1]);
  return ans;
}
bool possible(int l, int r) {
  int mask = (1 << sz) - 2;
  for (int i = mask; i >= 0; i = (i - 1) & mask) {
    if ((dp_left(i) >= l - 1) && (dp_right(mask ^ i) <= r + 1)) return true;
    if (i == 0) break;
  }
  return false;
}
int main() {
  scanf("%d%d", &n, &V);
  for (int i = 1; i <= n; i++) scanf("%d", &arr[i]);
  while (V) {
    steps.push_back(V);
    V /= 2;
  }
  steps.push_back(0);
  sz = (int)steps.size();
  for (int k = 0; k < sz; k++) {
    next_right[k][n + 1] = n + 1;
    next_right[k][n] = n;
    for (int i = n - 1; i >= 1; i--)
      if (arr[i + 1] - arr[i] <= steps[k])
        next_right[k][i] = next_right[k][i + 1];
      else
        next_right[k][i] = i;
    next_right[k][0] = next_right[k][1];
    next_left[k][0] = 0;
    next_left[k][1] = 1;
    for (int i = 2; i <= n; i++)
      if (arr[i] - arr[i - 1] <= steps[k])
        next_left[k][i] = next_left[k][i - 1];
      else
        next_left[k][i] = i;
    next_left[k][n + 1] = next_left[k][n];
  }
  int comps = 0, curr = 1;
  while (curr <= n) {
    comps++;
    curr = next_right[0][curr] + 1;
  }
  if (comps > sz + 2) {
    for (int i = 1; i <= n; i++) printf("Impossible\n");
    return 0;
  }
  memset(DP_left, -1, sizeof(DP_left));
  memset(DP_right, -1, sizeof(DP_right));
  curr = 1;
  while (curr <= n) {
    if (possible(curr, next_right[0][curr])) {
      for (int i = curr; i <= next_right[0][curr]; i++) printf("Possible\n");
    } else {
      for (int i = curr; i <= next_right[0][curr]; i++) printf("Impossible\n");
    }
    curr = next_right[0][curr] + 1;
  }
  return 0;
}
