#include <bits/stdc++.h>
using namespace std;
int n, V, x[200001], logv;
vector<int> v;
bool ans[200001];
int cal(int x) {
  int ans = 0;
  while (x) x >>= 1, ++ans;
  return ans;
}
bool walk(vector<int> &v, int s) {
  int n = v.size();
  if (n == 1 || !n) return true;
  int k = cal(s);
  bool flg = false;
  int st = 0, cnt = 1;
  for (int i = 1; i < n; ++i)
    if (v[i] - v[i - 1] > s) ++cnt;
  if (cnt > k + 1) return false;
  vector<int> tmp = v, tmpp;
  for (int i = 1; i < n; ++i) {
    if (v[i] - v[i - 1] > s) {
      tmpp.assign(tmp.begin() + st, tmp.begin() + i);
      tmp.erase(tmp.begin() + st, tmp.begin() + i);
      if (walk(tmp, s >> 1)) return true;
      tmp.insert(tmp.begin() + st, tmpp.begin(), tmpp.end());
      st = i;
    }
  }
  tmp.erase(tmp.begin() + st, tmp.end());
  if (walk(tmp, s >> 1)) return true;
  return false;
}
int main() {
  scanf("%d%d", &n, &V);
  for (int i = 1; i <= n; ++i) scanf("%d", &x[i]);
  for (int i = 1; i <= n; ++i) v.push_back(x[i]);
  int st = 0, cnt = 1, k = cal(V);
  for (int i = 1; i < n; ++i)
    if (v[i] - v[i - 1] > V) ++cnt;
  if (cnt > k + 1) {
    for (int i = 1; i <= n; ++i) printf("Impossible\n");
    return 0;
  }
  for (int i = 1; i < n; ++i) {
    if (v[i] - v[i - 1] > V) {
      vector<int> tmp = v;
      tmp.erase(tmp.begin() + st, tmp.begin() + i);
      if (walk(tmp, V >> 1)) {
        for (int j = st; j < i; ++j) ans[j + 1] = true;
      }
      st = i;
    }
  }
  vector<int> tmp = v;
  tmp.erase(tmp.begin() + st, tmp.end());
  if (walk(tmp, V >> 1)) {
    for (int j = st; j < n; ++j) ans[j + 1] = true;
  }
  for (int i = 1; i <= n; ++i) printf(ans[i] ? "Possible\n" : "Impossible\n");
  return 0;
}
