#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double db;
template<class T>inline void MAX(T &a,T b){if(b>a)a=b;}
template<class T>inline void MIN(T &a,T b){if(b<a)a=b;}
template<class T>inline void rd(T &x){
	x=0;char o,f=1;
	while(o=getchar(),o<48)if(o=='-')f=-f;
	do x=(x<<3)+(x<<1)+(o^48);
	while(o=getchar(),o>47);
	x*=f;
}
const int M=1e5+5;
const db eps=1e-6;
int n,m,A[M],ans[M];
db B[M],dp[M][10];
int main(){
#ifndef ONLINE_JUDGE
//	freopen("nudun.in","r",stdin);
//	freopen("nudun.out","w",stdout);
#endif
	rd(n),rd(m);
	for(int i=1;i<=n;i++)rd(A[i]);
	for(int i=1;i<=n;i++)B[i]=log2(A[i]);
	for(int i=0;i<=9;i++)dp[0][i]=-1e9;
	dp[0][1]=0;
	for(int i=1;i<=n;i++){
		for(int j=0;j<=9;j++)dp[i][j]=dp[i-1][j];
		for(int j=0;j<=9;j++){
			MAX(dp[i][j*A[i]%10],dp[i-1][j]+B[i]);
		}
	}
//	for(int i=1;i<=n;i++){
//		for(int j=0;j<=9;j++){
//			if(dp[i][j]<0)printf(" -1  ");
//			else printf("%.2lf ",dp[i][j]);
//		}puts("");
//	}
	
	if(dp[n][m]<eps)puts("-1");
	else{
		int len=0,d=m;
		for(int i=n;i;i--){
			int op=0,dd=0;
			if(abs(dp[i][d]-dp[i-1][d])>eps){
				for(int j=0;j<=9;j++){
					if(j*A[i]%10==d&&abs(dp[i][d]-dp[i-1][j]-B[i])<eps)op=1,dd=j;
				}
			}
			if(op)ans[++len]=A[i],d=dd;
		}
		sort(ans+1,ans+len+1);
		printf("%d\n",len);
		for(int i=1;i<=len;i++)printf("%d%c",ans[i],i==len?'\n':' ');
	}
	return 0;
}
