#include <bits/stdc++.h>

using namespace std;

// Header files, namespaces,
// macros as defined above
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;

#define ordered_set tree<int, null_type,less<int>, rb_tree_tag,tree_order_statistics_node_update>


#define f first
#define s second
#define db long double
#define pb push_back
#define sz(c) (c).size()
#define all(c) (c).begin(),(c).end()

typedef long long ll;
typedef pair <int , int> ii;
typedef pair <ii , int> iii;
typedef vector <int> vi;
typedef vector <ii> vii;
typedef vector <iii> viii;
typedef vector <vi> vvi;
typedef vector <vii> vvii;

const ll mod = 1e9+7;
const int MAX = 1e6+5;
const db eps = 1e-13;

vi v;
int n;

int memo[MAX][2] , mn;


bool dp( int k , bool player ) {

    if( k < mn ) {
        return player==1;
    }

    if( memo[k][player] != -1 ) {
        return memo[k][player];
    }

    bool res = false;

    if( player == false ) {
        for( int i = 1 ; i <= n ; i++ )
            res |= dp( k-v[i] , player^1 );
    } else {
        res = true;
        for( int i = 1 ; i <= n ; i++ )
            res &= dp( k-v[i] , player^1 );
    }

    return memo[k][player]=res;

}

int main()
{
	ios_base::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
    cout<<setprecision(11)<<fixed;
    memset(memo , -1 , sizeof memo);

    int k;
    cin>>n>>k;
    v = vi(n+1);
    mn = INT_MAX;
    for( int i = 1; i <= n ; i++ ) {
        cin>>v[i];
        mn = min( mn , v[i] );
    }
//    cout<<mn<<"\n";
    cout<<( dp( k , 0 ) ? "First\n" : "Second\n" );

}
/*
1 100000
1
*/
