#include <bits/stdc++.h>
using namespace std;

#define pb push_back
#define all(a) begin(a), end(a)
#define deb(x) cout << #x << " = " << x << endl
#define debu(x, y) cout << "( " << #x << ", " << #y << " ) = ( " << x << ", " << y << " )" << endl
#define logarr(arr) for(int z=(0);z<((int)arr.size());z++) cout<<(arr[z])<<" ";cout<<endl;

int mod = 1e9 + 7;

int main() {

#ifndef ONLINE_JUDGE
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
#endif

    ios_base::sync_with_stdio(false);
    cin.tie(0);

    int n, d;
    cin >> n >> d;
    vector<int> a(n);
    for(int i=0; i<n; i++) {
        cin >> a[i];
    }
    sort(all(a));
    //logarr(a);

    if(d == 5) {
        bool is = false;
        for(auto u: a) {
            if(u%10 == 5) {
                is = true;
                break;
            }
        }
        if(is) {
            vector<int> ans;
            for(auto u: a) {
                if(u%10 != 0 && u%2 != 0) ans.pb(u);
            }
            cout << ans.size() << "\n";
            logarr(ans);
        } else {
            cout << -1 << "\n";
        }
        return 0;
    }

    if(d%2 != 0) {
        // odd
        vector<int> b;
        for(auto u: a) {
            if(u%2 != 0 && u%5 != 0) {
                b.pb(u);
            }
        }
        a = b;
    } else if(d != 0) {
        // remove 5
        vector<int> b;
        for(auto u: a) {
            if(u%5 != 0) {
                b.pb(u);
            }
        }
        a = b;
    }

    n = a.size();

    // normal log driven dp
    vector<int> v, ans;
    vector<int> cnt(11, 0);
    for(int i=0; i<n; i++) {
        if(cnt[a[i]%10] < 4) {
            cnt[a[i]%10]++;
            v.pb(a[i]);
        } else {
            ans.pb(a[i]);
        }
    }

    //logarr(ans);logarr(v);
    int current = 1;
    for(auto u: ans) {
        current = (current*u)%10;
    }

    vector<vector<double>> dp(55, vector<double> (11, -1e10));
    vector<vector<int>> back(55, vector<int> (11, -1));
    dp[0][current] = 0;

    for(int i=0; i<v.size(); i++) {
        for(int j=0; j<10; j++) {
            if(i > 0) dp[i][j] = dp[i-1][j];
        }
        // let's see whom to include
        for(int j=0; j<10; j++) {
            double bef = -1e10;
            if(i > 0) bef = dp[i-1][j];
            else if(j == current) bef = 0;
            if(bef + log10(v[i]) > dp[i][(j*v[i])%10]) {
                dp[i][(j*v[i])%10] = bef + log10(v[i]);
                back[i][(j*v[i])%10] = j;
            }
        }
    }

    if(v.size() == 0 || dp[v.size()-1][d] < -10) {
        cout << "-1" << "\n";
    } else {
        // trace back the answer
        int res = d;
        for(int i=v.size()-1; i>=0; i--) {
            if(back[i][res] != -1) {
                res = back[i][res];
                ans.pb(v[i]);
            }
        }
        if(ans.size() == 0) {
            // worst case of all
            cout << -1 << "\n";
        } else {
            cout << ans.size() << "\n";
            for(auto u: ans) {
                cout << u << " ";
            }
        }
    }

    return 0;
}

// D
  	 	 	     		 		 					 		 	 		