// Slower C++ solution:
#include "bits/stdc++.h"

using namespace std;



#define ll long long int

#define loop(i,s,e) for(ll i=s; i<e; i++)

#define endl '\n'

#define vll vector<ll>

#define pll pair<ll, ll>

#define ff first

#define ss second

#define bug(...)        __f (#__VA_ARGS__, __VA_ARGS__)

#define N 100001

#define pb push_back

#define INF LLONG_MAX

#define inf INT_MAX

#define minusinf INT_MIN



template <typename Arg1>

void __f (const char* name, Arg1&& arg1) { cout << name << " : " << arg1 << endl; }

template <typename Arg1, typename... Args>

void __f (const char* names, Arg1&& arg1, Args&&... args)

{

     const char* comma = strchr (names + 1, ',');

     cout.write (names, comma - names) << " : " << arg1 << " | "; __f (comma + 1, args...);

}



ll arr[101];

ll n;



ll dp[100001][3];



bool second_wins(ll k, ll player){

	if(k<0 and player==2) return true;

	if(k<0 and player==1) return false;



	if(k==0 and player==2) return false;

	if(k==0 and player==1) return true;



	if(dp[k][player]!=-1) return dp[k][player];



	if(player==2){



		loop(i,0,n) {

			if(second_wins(k-arr[i],3-player)==true) {

				dp[k][player]=1;

				return true;

			}

		}

		dp[k][player] = 0;

		return false;

	}



	loop(i,0,n) {

		if(second_wins(k-arr[i],3-player)==false) {

			dp[k][player] = 0;

			return false;

		}

	}

	dp[k][player] = 1;

	return true;

}



void alpha(){



	memset(dp, -1, sizeof(dp));



	ll k;

	cin>>n>>k;



	loop(i,0,n) cin>>arr[i];



	if(second_wins(k,1)) cout<<"Second"<<endl;

	else cout<<"First"<<endl;



	

	return;



}



int main(){



	ios_base:: sync_with_stdio(false);

    cin.tie(NULL); cout.tie(NULL);







    ll t=1;

	//cin>>t;



  	while(t--) alpha();



	return 0;



}

// Faster C++ solution for the same problem (measured speedup: 3.365056744645324x):
#include "bits/stdc++.h"

using namespace std;



#define int long long int

#define loop(i,s,e) for(int i=s; i<e; i++)

#define endl '\n'

#define vii vector<int>

#define pii pair<int, int>

#define ff first

#define ss second

#define N 100001

#define pb push_back

#define INF LLONG_MAX

#define inf INT_MAX



void INP();



#define bug(...)        __f (#__VA_ARGS__, __VA_ARGS__)

#define rtn                                       if(0)return;

template <typename Arg1>

void __f (const char* name, Arg1&& arg1) { rtn cout << name << " : " << arg1 << endl; }

template <typename Arg1, typename... Args>

void __f (const char* names, Arg1&& arg1, Args&&... args)

{     rtn 

     const char* comma = strchr (names + 1, ',');

     cout.write (names, comma - names) << " : " << arg1 << " | "; __f (comma + 1, args...);

}



void alpha()

{	

	int k, n;

	cin>>n>>k;



	int arr[n];

	loop(i,0,n) cin>>arr[i];



	int dp[k+1]={0};



	loop(i,1,k+1){

		loop(j,0,n){

			if(i>=arr[j] and dp[i-arr[j]]==0) dp[i]=1;

		}

	}





	if(dp[k]==1) cout<<"First"<<endl;

	else cout<<"Second"<<endl;



}



int32_t main(){



	ios_base:: sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);

	//INP();

    int t=1;

	//cin>>t;



  	while(t--) alpha();



	return 0;



}













































inline void INP()

{

      #ifndef ONLINE_JUDGE

          freopen("input.txt",  "r",  stdin);

          freopen("output.txt", "w", stdout);

      #endif

}