#include <bits/stdc++.h>
#define pc putchar
#define gc() getchar()
#define pb emplace_back
const int N=1e5+5;

double f[N][10];
struct Node
{
	int i,d,chose;
}pre[N][10];

inline int read()
{
	int now=0,f=1; char c=gc();
	for(;!isdigit(c); c=='-'&&(f=-1), c=gc());
	for(; isdigit(c); now=now*10+c-48, c=gc());
	return now*f;
}

int main()
{
	int n=read(),D=read();
	for(int i=0; i<=n; ++i)
		for(int j=0; j<10; ++j) f[i][j]=-1e18;
	f[0][1]=0;
	for(int i=1; i<=n; ++i)
	{
		int tmp=read(); double a=log(tmp);
//		printf("i:%d tmp:%d a:%.3f\n",i,tmp,a);
		for(int j=0; j<10; ++j)
		{
			int nj=j*tmp%10;
			if(f[i-1][j]+a>f[i][nj])
				f[i][nj]=f[i-1][j]+a, pre[i][nj]=(Node){i-1,j,tmp};
		}
		for(int j=0; j<10; ++j)
			if(f[i-1][j]>f[i][j])
				f[i][j]=f[i-1][j], pre[i][j]=(Node){i-1,j,0};
//		for(int j=0; j<10; ++j) printf("f[%d][%d]=%.3f\n",i,j,f[i][j]);
	}
	if(f[n][D]<0 || fabs(f[n][D])<1e-10) return puts("-1"),0;
	std::vector<int> ans;
	for(int i=n,d=D; i; )
	{
		Node t=pre[i][d];
		if(t.chose) ans.pb(t.chose);
		i=t.i, d=t.d;
	}
	printf("%d\n",ans.size());
	std::reverse(ans.begin(),ans.end());
	for(auto x:ans) printf("%d ",x);
	

	return 0;
}