// #undef _GLIBCXX_DEBUG

#include <bits/stdc++.h>
using namespace std;
 
#ifdef SG
	#include <debug.h>
#else
	#define show(...)
	#define debug(...)
	#define deepen(...)
	#define timer(...)
#endif
 
#define ARG4(_1,_2,_3,_4,...) _4
 
#define forn3(i,l,r) for (int i = int(l); i < int(r); ++i)
#define forn2(i,n) forn3 (i, 0, n)
#define forn(...) ARG4(__VA_ARGS__, forn3, forn2) (__VA_ARGS__)
 
#define ford3(i,l,r) for (int i = int(r) - 1; i >= int(l); --i)
#define ford2(i,n) ford3 (i, 0, n)
#define ford(...) ARG4(__VA_ARGS__, ford3, ford2) (__VA_ARGS__)
 
#define forv(i,v) for (auto i = v.begin(); i != v.end(); ++i)
#define forr(i,v) for (auto i = v.end(); i != v.begin() && (--i, 1); )
#define ve vector
#define pa pair
#define tu tuple
#define mp make_pair
#define mt make_tuple
#define pb push_back
#define fs first
#define sc second
#define all(a) (a).begin(), (a).end()
#define sz(a) ((int)(a).size())
 
typedef long double ld;
typedef long long ll;
typedef unsigned long long ull;
typedef unsigned int ui;
typedef unsigned char uc;
typedef pa<int, int> pii;
typedef pa<int, ll> pil;
typedef pa<ll, int> pli;
typedef pa<ll, ll> pll;
typedef ve<int> vi;
 
const ld pi = 3.1415926535897932384626433832795l;
 
template<typename T> inline auto sqr (T x) -> decltype(x * x) {return x * x;}
template<typename T> inline T abs (T x) {return x > T() ? x : -x;}
template<typename T1, typename T2> inline bool umx (T1& a, T2 b) {if (a < b) {a = b; return 1;} return 0;}
template<typename T1, typename T2> inline bool umn (T1& a, T2 b) {if (b < a) {a = b; return 1;} return 0;}
 
const int period[10] = {1, 1, 4, 4, 2, 1, 1, 4, 4, 2};
vi pw[10];
vi a[10];
ve<pa<pii, ld> > t[10];
int d;

ld best;
vi ans;
vi ord;

void calc(int i, int curd, ld curc) {
	if (i == 10) {
		if (curd == d && umn(best, curc)) {
			ans = ord;			
		}
		return;
	}
	forn(j, sz(t[i])) {
		ord.pb(t[i][j].fs.sc);
		calc(i + 1, (curd * t[i][j].fs.fs) % 10, curc + t[i][j].sc);
		ord.pop_back();
	}
}

int main () {
	std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
	cout.setf(ios::showpoint | ios::fixed);
	cout.precision(20);
#ifdef SG
	freopen("input.txt", "r", stdin);
//	freopen("output.txt", "w", stdout);
#endif
	forn(i, 10) {
		pw[i].resize(4);
		pw[i][0] = i;
		forn(j, 1, 4) {
			pw[i][j] = (pw[i][j - 1] * i) % 10;
		}
	}
	int n;
	cin >> n >> d;
	forn(i, n) {
		int b;
		cin >> b;
		a[b % 10].pb(b);
	}
	forn(i, 10) {
		sort(all(a[i]));
	}             
	debug(a, a + 10);
	forn(i, 10) {		
		ld cur = 0;
		forn(j, sz(a[i])) {
			cur += logl(a[i][j]);					
		}
		t[i].pb(mp(mp(1, sz(a[i])), cur));
		forn(j, min(4, sz(a[i]))) {
			ld cost = 0;
			forn(k, j) {
				cost += logl(a[i][k]);
			}
			t[i].pb(mp(mp(pw[i][(sz(a[i]) - j - 1) % 4], j), cost));
		}
	}
	best = 1e9;
	debug(t, t + 10);
	calc(0, 1, 0l);
	if (best > 1e8) {
		cout << -1 << "\n";
		return 0;
	}
	vi res;
	forn(i, 10) {
		forn(j, ans[i], sz(a[i])) {
			res.pb(a[i][j]);
		}
	}
	if (sz(res) == 0) {
		cout << "-1\n";
		return 0;
	}
	cout << sz(res) << endl;
	forn(i, sz(res)) {
		cout << res[i] << " ";
	}
	cout << endl;
	return 0;
}