#include <bits/stdc++.h>
using namespace std;
const double PI = 3.14159265358979323846;
const double EPS = 1e-12;
const long long INF = 1LL << 29;
const long long mod = 1e9 + 7;
template <class T>
ostream &operator<<(ostream &os, const vector<T> &v) {
  int n = v.size();
  for (int(i) = 0; (i) < (long long)(n); ++(i))
    os << v[i] << (i == n - 1 ? "" : " ");
  return os;
}
vector<int> g[20][200010];
long long n, V, m;
long long x[200010];
map<set<int>, bool> dp[20];
void rec(int d, int l, int r) {
  int l2 = l;
  long long V2 = V >> d;
  if (V2 == 0) {
    return;
  }
  for (int u = l; u < r - 1; u++) {
    if (x[u + 1] - x[u] > V2) {
      rec(d + 1, l, u + 1);
      l = u + 1;
      g[d][l2].push_back(l);
    }
  }
  rec(d + 1, l, r);
}
bool rec2(int d, set<int> &st) {
  if (dp[d].count(st)) return dp[d][st];
  if (st.empty()) return true;
  if ((int)st.size() > m - d) return false;
  set<int> st2;
  for (auto v : st) {
    st2.insert(g[d + 1][v].begin(), g[d + 1][v].end());
    st2.insert(v);
  }
  if (st2.size() > 20) return dp[d][st] = false;
  for (auto u : st2) {
    set<int> st3;
    for (auto v : st2) {
      if (u != v) st3.insert(v);
    }
    if (rec2(d + 1, st3)) return dp[d][st] = true;
  }
  return dp[d][st] = false;
}
int main() {
  cin >> n >> V;
  {
    long long V2 = V;
    while (V2) {
      m++;
      V2 /= 2;
    }
  }
  for (int(i) = 0; (i) < (long long)(n); ++(i)) cin >> x[i];
  rec(0, 0, n);
  set<int> st;
  st.insert(0);
  for (auto u : g[0][0]) {
    st.insert(u);
  }
  st.insert(n);
  for (auto u : st) {
    if (u == n) break;
    set<int> st2(st);
    auto it = st2.upper_bound(u);
    int u2 = *it;
    --it;
    st2.erase(it);
    it = st2.end();
    --it;
    st2.erase(it);
    bool res = rec2(0, st2);
    for (int(i) = 0; (i) < (long long)(u2 - u); ++(i))
      cout << (res ? "Possible" : "Impossible") << endl;
  }
  return 0;
}
