#include <bits/stdc++.h>
#include<iostream>

using namespace std;

#define ll         long long int
#define ld          double
#define vi          vector <int>
#define vl          vector<ll>
#define vp          vector <pair<int,int>>
#define vvi         vector <vector <int>>
#define vpl         vector<pair<ll,ll>>
#define vvl         vector<vector<ll>>
#define pb          push_back
#define mp          make_pair
#define pi          pair<int,int>
#define all(a)      a.begin(),a.end()
#define tillN(a,n)  a.begin(),a.begin() + n
#define ff          first
#define ss          second
#define minel(a)	*min_element(all(a))
#define maxel(a)	*max_element(all(a))
#define minelN(a,n) *min_element(tillN(a,n))
#define maxelN(a,n) *max_element(tillN(a,n))
#define mod         1000000007

ll inf = 1e18;

ll expo(ll x,ll y)
{
        ll ans = 1;
        while(y!=0)
        {
                if(y%2)
                {
                        ans = ans*x;
                }

                y = y>>1;
                x = x*x;
        }

        return ans;
}

ll gcd(ll a,ll b)
{
	if(a==0)
	  return b;

	 return gcd(b%a , a);
}

ll lcm(ll a, ll b)
{
	return (a*b) / gcd(a,b);
}

ll max(ll x,ll y)
{
    if(x > y)
        return x;
    return y;

}

ll min(ll x,ll y)
{
    if(x < y)
        return x;
    return y;

}

ll dp[100005][2];

ll winner(vl a ,ll stones ,int turn ,ll minele)
{
    //cout << "at " << stones << " stones and " << turn << " turn" << endl;
    if(dp[stones][turn]!=-1)
    {
        //cout << "this value is already calc to be " << dp[stones][turn] << endl;
        return dp[stones][turn];
    }

    if(stones < minele)
    {
        //cout << "lower then minel ";
        //cout << "turn " << turn << " so returning " << (turn ^ 1) << endl;
        return dp[stones][turn] = (turn ^ 1);
    }

    vector<ll>::iterator start = lower_bound(a.begin() , a.end() , stones);
    if(start == a.end())
        start--;
    if(*start > stones)
        start--;
    //cout << "gonna start subtracting from " << *start << endl;


    int next_turn = (turn ^ 1);
    vector<ll>::iterator i;
    int found_same = 0;

    for(i =start;i>=a.begin();i--)
    {
        //cout << "checking for " << stones - *i << " with " << next_turn << " turn" << endl;
        found_same = ((turn ^ winner(a , stones - (*i) , next_turn , minele)) ^ 1);
        if(found_same)
        {
            //cout << "found same breaking" << endl;
            break;
        }
    }

    if(found_same)
        dp[stones][turn] = turn;
    else
        dp[stones][turn] = (turn ^ 1);

    //cout << stones << " stones and " << turn  << " turn is " << dp[stones][turn] << endl; 

    return dp[stones][turn];
}

 
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int n;
    ll k;
    cin >> n >> k;
    vl arr(n);
    for(int i=0;i<n;i++)
        cin >> arr[i];

    if(n==1 && arr[0]==1)
    {
        if(k%2)
            cout << "First" << endl;
        else
            cout << "Second" << endl;
    }
    else
    {
        int m = minel(arr);

    
        for(ll i=0;i<=k;i++)
        {
            dp[i][0] = -1;
            dp[i][1] = -1;
        }

    //cout << "took input" << endl;

        dp[k][1] = winner(arr , k , 1 , m);
        if(dp[k][1])
            cout << "First" << endl;
        else
            cout << "Second" << endl;
    }



}


Measured memory_bytes: 2688