#include <bits/stdc++.h>
using namespace std;
int n, v, x[100005];
int dp1[(1 << 18) + 3], dp2[(1 << 18) + 3];
int tor[19][100005], tol[19][100005], len[19], dep;
void maxn(int &x, int y) { y > x ? x = y : 0; }
int mxr[100005];
int main() {
  scanf("%d%d", &n, &v);
  x[0] = -2e9, x[n + 1] = 2e9;
  for (int i = 1; i <= n; i++) scanf("%d", &x[i]);
  for (len[0] = v; len[dep] != 0; dep++) len[dep + 1] = len[dep] / 2;
  dep++;
  for (int d = 0; d < dep; d++) {
    tol[d][0] = n, tor[d][n + 1] = n;
    for (int i = 1; i <= n; i++)
      tol[d][i] = (x[i] - x[i - 1] <= len[d]) ? tol[d][i - 1] : n + 1 - i;
    for (int i = n; i >= 1; i--)
      tor[d][i] = (x[i + 1] - x[i] <= len[d]) ? tor[d][i + 1] : i;
  }
  for (int i = 0; i < (1 << dep); i += 2)
    for (int j = 1; j < dep; j++)
      if ((i & (1 << j)) == 0)
        maxn(dp1[i | (1 << j)], tor[j][dp1[i] + 1]),
            maxn(dp2[i | (1 << j)], tol[j][n - dp2[i]]);
  memset(mxr, 0xc0, sizeof(mxr));
  for (int i = 0, j = ((1 << dep) - 1) ^ 1; j >= 0; i += 2, j -= 2)
    maxn(mxr[dp1[i]], dp2[j]);
  for (int i = n; i >= 1; i--) maxn(mxr[i], mxr[i + 1]);
  for (int i = 1; i <= n; i++)
    if (mxr[n - tol[0][i]] + tor[0][i] >= n)
      puts("Possible");
    else
      puts("Impossible");
  return 0;
}
