#include<cstdio>
#include<vector>
#include<map>
int N,V,x[200010],fa[3600010],tot;
std::vector<int>ch[3600010];
int addc(int x){
	int y=++tot;
	fa[y]=x;ch[x].push_back(y);
	return y;
}
std::map<std::vector<int>,bool>M;
bool dfs(std::vector<int>v,int d){
	if(v.size()>d)return 0;
	if(!v.size())return 1;
	if(M.count(v))return M[v];
	int cs=0;
	for(int i=0;i<v.size();i++)cs+=ch[v[i]].size();
	for(int i=0;i<v.size();i++)if(cs-ch[v[i]].size()<d){
		std::vector<int>w;
		for(int j=0;j<v.size();j++)if(j!=i){
			int c=v[j];
			for(int k=0;k<ch[c].size();k++)w.push_back(ch[c][k]);
		}
		if(dfs(w,d-1))return M[v]=1;
	}
	return M[v]=0;
}
int get_sz(int i){
	if(!ch[i].size())return 1;
	int sz=0;
	for(int j=0;j<ch[i].size();j++)sz+=get_sz(ch[i][j]);
	return sz;
}
bool res[200010];
int main(){
	scanf("%d%d",&N,&V);
	int cur=0,d=0;
	for(int i=0;i<N;i++){
		scanf("%d",x+i);
		while(d&&x[i]-x[i-1]>V>>d-1)cur=fa[cur],--d;
		while(V>>d)cur=addc(cur),++d;
		cur=addc(cur);++d;
	}
	if(ch[0].size()<=d){
		int cnt=0;
		for(int i=0;i<ch[0].size();i++){
			std::vector<int>v;
			bool r=1;
			for(int j=0;j<ch[0].size()&&r;j++)if(j!=i){
				int c=ch[0][j];
				if(v.size()+ch[c].size()>=d)r=0;
				else for(int k=0;k<ch[c].size();k++)v.push_back(ch[c][k]);
			}
			if(r)r=dfs(v,d-1);
			for(int t=get_sz(ch[0][i]);t--;)res[cnt++]=r;
		}
	}
	for(int i=0;i<N;i++)puts(res[i]?"Possible":"Impossible");
}