// Original C++ solution (slower):
#include <bits/stdc++.h>

#include <ext/pb_ds/assoc_container.hpp> // Common file

#include <ext/pb_ds/tree_policy.hpp> // Including tree_order_statistics_node_update

#define ll long long

#define PI 3.141592653589

#define IO ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0)

#define EPS 1e-7

#define PII pair<int,int>

#define s second

#define f first

using namespace std;

using namespace __gnu_pbds;

typedef tree<int, null_type, less<int>, rb_tree_tag,

             tree_order_statistics_node_update>

    ordered_set;

ll MOD = 1e9+7;

const int RANDOM = chrono::high_resolution_clock::now().time_since_epoch().count();

mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

int random_int(int l,int r){return uniform_int_distribution<int>(l,r)(rng);}

ll fast_power(ll x, ll p){

    ll res = 1;

    while(p > 0){

        if(p & 1){

            res = (res * x)%MOD;

        }

        p = p >> 1;

        x = (x*x)%MOD;

    }

    return res;

}

vector<int> arr;

int n, K;

int dp[100005];

int solve(int k){

    if(k == 0){

        return 1;

    }

    if(dp[k] != -1){

        return dp[k];

    }

    int i = 0;

    int ans = 0;

    for(i = 0; i < n && arr[i] <= k; i++){

        int temp = solve(k-arr[i]);

        if(temp){

            ans = 1;

        }

    }

    return dp[k] =!ans;

}

int main() {

    IO;

    cin >> n >> K;

    memset(dp, -1, sizeof dp);

    arr.resize(n);

    for(int i = 0; i < n; i++){

        cin >> arr[i];

    }

    dp[0] = 0;

    for(int i = 1; i <= K; i++){

        dp[i] = 0;

        for(int j = 0; j < n && arr[j] <= i; j++){

            dp[i] = dp[i] | !dp[i-arr[j]];

        }

    }

    cout << ((dp[K]) ? "First" : "Second");



    return 0;

}


// Optimized solution to the same problem (faster):
#include <bits/stdc++.h>

#include <ext/pb_ds/assoc_container.hpp> // Common file

#include <ext/pb_ds/tree_policy.hpp> // Including tree_order_statistics_node_update

#define ll long long

#define PI 3.141592653589

#define IO ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0)

#define EPS 1e-7

#define PII pair<int,int>

#define s second

#define f first

using namespace std;

using namespace __gnu_pbds;

typedef tree<int, null_type, less<int>, rb_tree_tag,

             tree_order_statistics_node_update>

    ordered_set;

ll MOD = 1e9+7;

const int RANDOM = chrono::high_resolution_clock::now().time_since_epoch().count();

mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

int random_int(int l,int r){return uniform_int_distribution<int>(l,r)(rng);}

ll fast_power(ll x, ll p){

    ll res = 1;

    while(p > 0){

        if(p & 1){

            res = (res * x)%MOD;

        }

        p = p >> 1;

        x = (x*x)%MOD;

    }

    return res;

}

vector<int> arr;

int n, K;

bool dp[100005];

int main() {

    IO;

    cin >> n >> K;

    arr.resize(n);

    for(int i = 0; i < n; i++){

        cin >> arr[i];

    }

    dp[0] = 0;

    for(int i = 1; i <= K; i++){

        dp[i] = 0;

        for(int j = 0; j < n && arr[j] <= i; j++){

            dp[i] = dp[i] | !dp[i-arr[j]];

        }

    }

    cout << ((dp[K]) ? "First" : "Second");



    return 0;

}


// Fastest known solution for this problem: