stablegradients/pie-gem5-pairs huggingface dataset:
// Slower C++ solution:
#include<set>

#include<map>

#include<cmath>

#include<ctime>

#include<queue>

#include<stack>

#include<cstdio>

#include<string>

#include<vector>

#include<random>

#include<cstdlib>

#include<cstring>

#include<iomanip>

#include<iostream>

#include<algorithm>

#include<unordered_map>

#define endl "\n"

#define fi first

#define se second

#define db double

#define gcd __gcd

#define pb push_back

#define mp make_pair

#define lowbit(x) (x & (-x))

#define PII  pair<int, int> 

#define all(x) x.begin(), x.end()

#define debug(x) cout << #x << " = " << x << endl

#define rep(i, a, b) for(__typeof(b) i = a; i <= (b); i++)

#define Rep(i, a, b) for(__typeof(a) i = a; i >= (b); i--)

#define FAST ios::sync_with_stdio(false); cin.tie(0); cout.tie(0)

template<class T> inline T qmin(T a, T b) { return a < b ? a : b; }

template<class T> inline T qmax(T a, T b) { return a > b ? a : b; }

typedef long long ll;

typedef unsigned long long ull;

const db eps = 1e-9;

const db PI = acos(-1);

const int inf = 0x3f3f3f3f;

const int mod = (int)1e9 + 7;

const int maxn = (int)1e5 + 5;//remember to modify it, No RE or MLE

const ll INF = 0x3f3f3f3f3f3f3f3f;

using namespace std;



ll qpow(ll x, ll y) { ll ret = 1; for( ; y; y >>= 1, x = (x * x) % mod) if(y & 1) ret = (ret * x) % mod; return ret; }



inline int read(){

	char ch = getchar();

	int x = 0, f = 1;

	while(ch < '0' || ch > '9'){

		if(ch == '-') f = -1;

		ch = getchar();

	}

	while('0' <= ch && ch <= '9'){

		x = x * 10 + ch - '0';

		ch = getchar();

	}

	return x * f;

}



int dp[maxn];//0 必败态; 1必胜态; -1尚未确定;

int a[105];

int n, k;

int cnt = 0;



bool dfs(int now){

	if(~dp[now]) return dp[now];

	bool ret = 0;

	rep(i, 1, n){

		if(a[i] > now) break;

		if(!dfs(now - a[i])) ret = 1;

	}

	return dp[now] = ret;

}



int main()

{

	n = read(), k = read();

	rep(i, 1, n) a[i] = read();

	memset(dp, -1, sizeof dp);

	sort(a + 1, a + n + 1);

	dp[0] = 0;

	dfs(k);

	puts(dp[k] ? "First" : "Second");

	return 0;

}

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

using namespace std;



int main(){

	int N,K;

	cin>>N>>K;

	vector<int>stones(N);

	vector<int>dp(K+1,0);

	

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

		int v;

		cin>>v;

		stones[i] = v;

	}

 

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

		for(int j = 0; j < stones.size(); j++){

			if(stones[j] <= i){

				if(dp[i- stones[j]] == 0){

					dp[i] = 1;

				}

			}

		}

	}

	cout<<endl;

 

	if(dp[K] == 1){

		cout<<"First"<<endl;

	}

	else cout<<"Second"<<endl;

}
// Slower C++ solution:
#include<bits/stdc++.h>

using namespace std;

typedef long long int ll;

const int MAX=1e5 + 10,MOD=1e9 + 7;

int N,K,A[105],mn=1e9;

int dp[MAX][2];

int f(int rem,int turn)

{

    if(rem<mn&&turn==1)return 0;

    if(rem<mn&&turn==0)return 1;

    if(dp[rem][turn]!=-1)return dp[rem][turn];

    for(int i=0;i<N;i++)

    {

        if(rem-A[i]>=0)

        if(f(rem-A[i],turn^1)==turn){

            return dp[rem][turn] = turn;

        }

    }

    return dp[rem][turn] = turn^1;

}

int main ()

{

    ios_base::sync_with_stdio(false);

    cin.tie(0);



    memset(dp,-1,sizeof dp);

    cin >> N >> K;

    for(int i=0;i<N;i++){cin>>A[i];mn = min(mn,A[i]);}

    if(f(K,0)==0){

        cout<<"First\n";

    }

    else cout<<"Second\n";

    //main();

    return 0;

}


// Faster C++ solution for the same problem (measured speedup: 1.4588191871213103x):
#include<iostream>

#include<vector>

using namespace std;



int main()

{

	int N,K;

	cin>>N>>K;

	vector<int> stone(N);

	vector<int> dp(K+1,0);

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

		int v;

		cin>>v;

		stone[i]=v;

	}

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

		for(int j=0;j<stone.size();j++){

			if(stone[j]<=i){

				if(dp[i-stone[j]]==0){

					dp[i]=1;

				}

			}

		} 

	cout<<endl;

	}

	if(dp[K]==1)

		cout<<"First"<<endl;

	else

		cout<<"Second"<<endl;	

}
// Slower C++ solution:
#include<set>

#include<map>

#include<cmath>

#include<ctime>

#include<queue>

#include<stack>

#include<cstdio>

#include<string>

#include<vector>

#include<random>

#include<cstdlib>

#include<cstring>

#include<iomanip>

#include<iostream>

#include<algorithm>

#include<unordered_map>

#define endl "\n"

#define fi first

#define se second

#define db double

#define gcd __gcd

#define pb push_back

#define mp make_pair

#define lowbit(x) (x & (-x))

#define PII  pair<int, int> 

#define all(x) x.begin(), x.end()

#define debug(x) cout << #x << " = " << x << endl

#define rep(i, a, b) for(__typeof(b) i = a; i <= (b); i++)

#define Rep(i, a, b) for(__typeof(a) i = a; i >= (b); i--)

#define FAST ios::sync_with_stdio(false); cin.tie(0); cout.tie(0)

template<class T> inline T qmin(T a, T b) { return a < b ? a : b; }

template<class T> inline T qmax(T a, T b) { return a > b ? a : b; }

typedef long long ll;

typedef unsigned long long ull;

const db eps = 1e-9;

const db PI = acos(-1);

const int inf = 0x3f3f3f3f;

const int mod = (int)1e9 + 7;

const int maxn = (int)1e5 + 5;//remember to modify it, No RE or MLE

const ll INF = 0x3f3f3f3f3f3f3f3f;

using namespace std;



ll qpow(ll x, ll y) { ll ret = 1; for( ; y; y >>= 1, x = (x * x) % mod) if(y & 1) ret = (ret * x) % mod; return ret; }



inline int read(){

	char ch = getchar();

	int x = 0, f = 1;

	while(ch < '0' || ch > '9'){

		if(ch == '-') f = -1;

		ch = getchar();

	}

	while('0' <= ch && ch <= '9'){

		x = x * 10 + ch - '0';

		ch = getchar();

	}

	return x * f;

}



int dp[maxn];//0 必败态; 1必胜态; -1尚未确定;

int a[105];

int n, k;

int cnt = 0;



bool dfs(int now){

	if(~dp[now]) return dp[now];

	bool ret = 0;

	rep(i, 1, n){

		if(a[i] > now) break;

		if(!dfs(now - a[i])) ret = 1;

	}

	return dp[now] = ret;

}



int main()

{

	n = read(), k = read();

	rep(i, 1, n) a[i] = read();

	memset(dp, -1, sizeof dp);

	sort(a + 1, a + n + 1);

	dp[0] = 0;

	dfs(k);

	puts(dp[k] ? "First" : "Second");

	return 0;

}

// Faster C++ solution for the same problem (measured speedup: 1.115448959196787x):
#include<iostream>

#include<vector>

using namespace std;



int main()

{

	int N,K;

	cin>>N>>K;

	vector<int> stone(N);

	vector<int> dp(K+1,0);

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

		int v;

		cin>>v;

		stone[i]=v;

	}

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

		for(int j=0;j<stone.size();j++){

			if(stone[j]<=i){

				if(dp[i-stone[j]]==0){

					dp[i]=1;

				}

			}

		} 

	cout<<endl;

	}

	if(dp[K]==1)

		cout<<"First"<<endl;

	else

		cout<<"Second"<<endl;	

}
// Slower C++ solution:
#include<bits/stdc++.h>

using namespace std;

typedef long long int ll;

const int MAX=1e5 + 10,MOD=1e9 + 7;

int N,K,A[105],mn=1e9;

int dp[MAX][2];

int f(int rem,int turn)

{

    if(rem<mn&&turn==1)return 0;

    if(rem<mn&&turn==0)return 1;

    if(dp[rem][turn]!=-1)return dp[rem][turn];

    for(int i=0;i<N;i++)

    {

        if(rem-A[i]>=0)

        if(f(rem-A[i],turn^1)==turn){

            return dp[rem][turn] = turn;

        }

    }

    return dp[rem][turn] = turn^1;

}

int main ()

{

    ios_base::sync_with_stdio(false);

    cin.tie(0);



    memset(dp,-1,sizeof dp);

    cin >> N >> K;

    for(int i=0;i<N;i++){cin>>A[i];mn = min(mn,A[i]);}

    if(f(K,0)==0){

        cout<<"First\n";

    }

    else cout<<"Second\n";

    //main();

    return 0;

}


// Faster C++ solution for the same problem (measured speedup: 1.3068632898263048x):
/*

    -ensure correct output format

    -ensure printing required output

    -reread the problem statement

  */



#include<bits/stdc++.h>

using namespace std;

typedef int ll;

typedef unsigned long long ull;

typedef pair<ll,ll>pll;

typedef pair<ll,pair<ll,ll>>plll;

#define fastread() (ios_base:: sync_with_stdio(false),cin.tie(NULL));

#define vll(v) v.begin(),v.end()

#define all(x) x.rbegin(),x.rend()

#define min3(a, b, c)   min(a, min(b, c))

#define max3(a, b, c)   max(a, max(b, c))

#define F first

#define S second

#define in  freopen("input.txt", "r", stdin)

#define out  freopen("output.txt", "w", stdout)

#define minheap int,vector<int>,greater<int>

#define pb push_back

#define eb emplace_back

#define ischar(x)  (('a' <= x && x <= 'z') || ('A' <= x && x <= 'Z'))

#define isvowel(ch) ((ch=='a'||ch=='e'||ch=='i'||ch=='o'||ch=='u')||(ch=='A'|| ch=='E' || ch=='I'|| ch=='O'|| ch=='U'))

#define bug cout<<"BUG"<<endl;

const int Max = 1e5 + 10;

const int Mod = 1e9 + 7;

const double PI  =3.141592653589793238463;

bool compare(const pair<ll,ll> &a, const pair<ll,ll> &b)

{

       return (a.first > b.first);

}

ll lcm(ll a,ll b)

{

    if(a==0 || b==0)return 0;



    return a/__gcd(a,b)*b;

}



void input(ll ara[],ll n)

{

    for(ll i=0; i<n; i++)cin>>ara[i];

}



ll dp[Max+2];



ll ara[Max],n;



ll call(ll val)

{

    //cout<<i<<" "<<val<<endl;



     ll &ret=dp[val];





       if(ret!=-1)

        return ret;



       if(val==0)return dp[val]=0;



       ret=0;



          for(ll i=0; i<n && !ret; i++)

          {

              if(ara[i]<=val)

                ret=!call(val-ara[i]);

          }



          return ret;





}





int main()

{



   fastread();



   ll i,j,m,p,a,sum=0,k,t,b,c,d,cnt=0,q,l,r;





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



      cin>>n>>m;



      input(ara,n);







        if(call(m))

            cout<<"First"<<endl;



        else cout<<"Second"<<endl;











}
// Slower C++ solution:
#include<bits/stdc++.h>

#define ll long long

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

using namespace std;

double PI=acos(-1);

int n,k,arr[105],dp[100005][2];

bool solve(int sum,int p){

    bool check=1;

    bool ret;

    if(dp[sum][p]!=-1) return dp[sum][p];

    if(p) ret=1;

    else ret=0;

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

        if(sum>=arr[i]){

            check=0;

            if(p) ret=ret && solve(sum-arr[i],1-p);

            else ret= ret||solve(sum-arr[i],1-p);

        }

    }

    if(check==0) return dp[sum][p]=ret;

    return dp[sum][p]=p;

}



int main(){

    IO

    cin>>n>>k;

    memset(dp,-1,sizeof dp);

    for(int i=0;i<n;i++) cin>>arr[i];

    //solve(k,0);

    if(solve(k,0)==1) cout<<"First\n";

    else cout<<"Second\n";

    //for(int i=0;i<=k;i++) cout<<dp[i][0]<<" "<<dp[i][1]<<'\n';

    return 0;

}


// Faster C++ solution for the same problem (measured speedup: 1.3089478893390034x):
/*

    -ensure correct output format

    -ensure printing required output

    -reread the problem statement

  */



#include<bits/stdc++.h>

using namespace std;

typedef int ll;

typedef unsigned long long ull;

typedef pair<ll,ll>pll;

typedef pair<ll,pair<ll,ll>>plll;

#define fastread() (ios_base:: sync_with_stdio(false),cin.tie(NULL));

#define vll(v) v.begin(),v.end()

#define all(x) x.rbegin(),x.rend()

#define min3(a, b, c)   min(a, min(b, c))

#define max3(a, b, c)   max(a, max(b, c))

#define F first

#define S second

#define in  freopen("input.txt", "r", stdin)

#define out  freopen("output.txt", "w", stdout)

#define minheap int,vector<int>,greater<int>

#define pb push_back

#define eb emplace_back

#define ischar(x)  (('a' <= x && x <= 'z') || ('A' <= x && x <= 'Z'))

#define isvowel(ch) ((ch=='a'||ch=='e'||ch=='i'||ch=='o'||ch=='u')||(ch=='A'|| ch=='E' || ch=='I'|| ch=='O'|| ch=='U'))

#define bug cout<<"BUG"<<endl;

const int Max = 1e5 + 10;

const int Mod = 1e9 + 7;

const double PI  =3.141592653589793238463;

bool compare(const pair<ll,ll> &a, const pair<ll,ll> &b)

{

       return (a.first > b.first);

}

ll lcm(ll a,ll b)

{

    if(a==0 || b==0)return 0;



    return a/__gcd(a,b)*b;

}



void input(ll ara[],ll n)

{

    for(ll i=0; i<n; i++)cin>>ara[i];

}



ll dp[Max+2];



ll ara[Max],n;



ll call(ll val)

{

    //cout<<i<<" "<<val<<endl;



     ll &ret=dp[val];





       if(ret!=-1)

        return ret;



       if(val==0)return dp[val]=0;



       ret=0;



          for(ll i=0; i<n && !ret; i++)

          {

              if(ara[i]<=val)

                ret=!call(val-ara[i]);

          }



          return ret;





}





int main()

{



   fastread();



   ll i,j,m,p,a,sum=0,k,t,b,c,d,cnt=0,q,l,r;





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



      cin>>n>>m;



      input(ara,n);







        if(call(m))

            cout<<"First"<<endl;



        else cout<<"Second"<<endl;











}
// Slower C++ solution:
#include<bits/stdc++.h>

using namespace std;

#define  ll long long int

#define mx 1000007

ll dp[mx];

ll a[mx];



int main()

{

    ll n,k;

    cin>>n>>k;

    for(int i=1;i<=n;i++) cin>>a[i];



    memset(dp,0,sizeof(dp));

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

        for(int j=1;j<=n;j++){

            if(i-a[j]>=0){

                if(dp[i-a[j]]==0){

                    dp[i]=1;

                    break;

                }

            }

        }

    }

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

    else cout<<"Second"<<endl;

}

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

//#define int long long

#define fast ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0)

using namespace std;

#define endl '\n'

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

#define vii vector<int>

int n, k;

int v[110];

int dp[100005][3];

int solve(int rem=k, bool player=0) {///0 for First ,1 for Second

	//if (rem < 0) return player;

	int& ret = dp[rem][player];

	if (~ret) return ret;

	ret = !player;

	for (i, 0, n) {

		if (v[i] <= rem) {

			if (solve(rem - v[i], !player) == player) {

				ret = player;

			}

		}

	}

	return ret;

}

signed main()

{

	   fast;

  

	cin >> n >> k;

	for (i, 0, n) cin >> v[i];

	memset(dp, -1, sizeof dp);

	int sol = solve();

	if (!sol) cout << "First\n";

	else cout << "Second\n";

}
// Slower C++ solution:
#include<bits/stdc++.h>

using namespace std;

typedef long long int ll;

const int MAX=1e5 + 10,MOD=1e9 + 7;

int N,K,A[105],mn=1e9;

int dp[MAX][2];

int f(int rem,int turn)

{

    if(rem<mn&&turn==1)return 0;

    if(rem<mn&&turn==0)return 1;

    if(dp[rem][turn]!=-1)return dp[rem][turn];

    for(int i=0;i<N;i++)

    {

        if(rem-A[i]>=0)

        if(f(rem-A[i],turn^1)==turn){

            return dp[rem][turn] = turn;

        }

    }

    return dp[rem][turn] = turn^1;

}

int main ()

{

    ios_base::sync_with_stdio(false);

    cin.tie(0);



    memset(dp,-1,sizeof dp);

    cin >> N >> K;

    for(int i=0;i<N;i++){cin>>A[i];mn = min(mn,A[i]);}

    if(f(K,0)==0){

        cout<<"First\n";

    }

    else cout<<"Second\n";

    //main();

    return 0;

}


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

using namespace std;

bool dp[100005];

vector <int> a;

int N, K, temp;

int main(){

	scanf("%d%d", &N, &K);

	memset(dp, 0, sizeof(dp));

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

		scanf("%d", &temp);

		a.push_back(temp);

		dp[temp] = true;

	}

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

		bool win = false;

		for(auto j : a){

			if(i - j < 0) continue;

			if(dp[i-j] == false){

				win = true;

				break;

			}

		}

		if(win) dp[i] = true;

	}

	if(dp[K]) cout <<"First"<<endl;

	else cout << "Second"<<endl;





}
// Slower C++ solution:
#include<set>

#include<map>

#include<cmath>

#include<ctime>

#include<queue>

#include<stack>

#include<cstdio>

#include<string>

#include<vector>

#include<random>

#include<cstdlib>

#include<cstring>

#include<iomanip>

#include<iostream>

#include<algorithm>

#include<unordered_map>

#define endl "\n"

#define fi first

#define se second

#define db double

#define gcd __gcd

#define pb push_back

#define mp make_pair

#define lowbit(x) (x & (-x))

#define PII  pair<int, int> 

#define all(x) x.begin(), x.end()

#define debug(x) cout << #x << " = " << x << endl

#define rep(i, a, b) for(__typeof(b) i = a; i <= (b); i++)

#define Rep(i, a, b) for(__typeof(a) i = a; i >= (b); i--)

#define FAST ios::sync_with_stdio(false); cin.tie(0); cout.tie(0)

template<class T> inline T qmin(T a, T b) { return a < b ? a : b; }

template<class T> inline T qmax(T a, T b) { return a > b ? a : b; }

typedef long long ll;

typedef unsigned long long ull;

const db eps = 1e-9;

const db PI = acos(-1);

const int inf = 0x3f3f3f3f;

const int mod = (int)1e9 + 7;

const int maxn = (int)1e5 + 5;//remember to modify it, No RE or MLE

const ll INF = 0x3f3f3f3f3f3f3f3f;

using namespace std;



ll qpow(ll x, ll y) { ll ret = 1; for( ; y; y >>= 1, x = (x * x) % mod) if(y & 1) ret = (ret * x) % mod; return ret; }



inline int read(){

	char ch = getchar();

	int x = 0, f = 1;

	while(ch < '0' || ch > '9'){

		if(ch == '-') f = -1;

		ch = getchar();

	}

	while('0' <= ch && ch <= '9'){

		x = x * 10 + ch - '0';

		ch = getchar();

	}

	return x * f;

}



int dp[maxn];//0 必败态; 1必胜态; -1尚未确定;

int a[105];

int n, k;

int cnt = 0;



bool dfs(int now){

	if(~dp[now]) return dp[now];

	bool ret = 0;

	rep(i, 1, n){

		if(a[i] > now) break;

		if(!dfs(now - a[i])) ret = 1;

	}

	return dp[now] = ret;

}



int main()

{

	n = read(), k = read();

	rep(i, 1, n) a[i] = read();

	memset(dp, -1, sizeof dp);

	sort(a + 1, a + n + 1);

	dp[0] = 0;

	dfs(k);

	puts(dp[k] ? "First" : "Second");

	return 0;

}

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

using namespace std;

bool dp[100005];

vector <int> a;

int N, K, temp;

int main(){

	scanf("%d%d", &N, &K);

	memset(dp, 0, sizeof(dp));

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

		scanf("%d", &temp);

		a.push_back(temp);

		dp[temp] = true;

	}

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

		bool win = false;

		for(auto j : a){

			if(i - j < 0) continue;

			if(dp[i-j] == false){

				win = true;

				break;

			}

		}

		if(win) dp[i] = true;

	}

	if(dp[K]) cout <<"First"<<endl;

	else cout << "Second"<<endl;





}
// Slower C++ solution:
#include<bits/stdc++.h>

#define ll long long

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

using namespace std;

double PI=acos(-1);

int n,k,arr[105],dp[100005][2];

bool solve(int sum,int p){

    bool check=1;

    bool ret;

    if(dp[sum][p]!=-1) return dp[sum][p];

    if(p) ret=1;

    else ret=0;

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

        if(sum>=arr[i]){

            check=0;

            if(p) ret=ret && solve(sum-arr[i],1-p);

            else ret= ret||solve(sum-arr[i],1-p);

        }

    }

    if(check==0) return dp[sum][p]=ret;

    return dp[sum][p]=p;

}



int main(){

    IO

    cin>>n>>k;

    memset(dp,-1,sizeof dp);

    for(int i=0;i<n;i++) cin>>arr[i];

    //solve(k,0);

    if(solve(k,0)==1) cout<<"First\n";

    else cout<<"Second\n";

    //for(int i=0;i<=k;i++) cout<<dp[i][0]<<" "<<dp[i][1]<<'\n';

    return 0;

}


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

using namespace std;

bool dp[100005];

vector <int> a;

int N, K, temp;

int main(){

	scanf("%d%d", &N, &K);

	memset(dp, 0, sizeof(dp));

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

		scanf("%d", &temp);

		a.push_back(temp);

		dp[temp] = true;

	}

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

		bool win = false;

		for(auto j : a){

			if(i - j < 0) continue;

			if(dp[i-j] == false){

				win = true;

				break;

			}

		}

		if(win) dp[i] = true;

	}

	if(dp[K]) cout <<"First"<<endl;

	else cout << "Second"<<endl;





}
// Slower C++ solution:
/*

    -ensure correct output format

    -ensure printing required output

    -reread the problem statement

  */



#include<bits/stdc++.h>

using namespace std;

typedef int ll;

typedef unsigned long long ull;

typedef pair<ll,ll>pll;

typedef pair<ll,pair<ll,ll>>plll;

#define fastread() (ios_base:: sync_with_stdio(false),cin.tie(NULL));

#define vll(v) v.begin(),v.end()

#define all(x) x.rbegin(),x.rend()

#define min3(a, b, c)   min(a, min(b, c))

#define max3(a, b, c)   max(a, max(b, c))

#define F first

#define S second

#define in  freopen("input.txt", "r", stdin)

#define out  freopen("output.txt", "w", stdout)

#define minheap int,vector<int>,greater<int>

#define pb push_back

#define eb emplace_back

#define ischar(x)  (('a' <= x && x <= 'z') || ('A' <= x && x <= 'Z'))

#define isvowel(ch) ((ch=='a'||ch=='e'||ch=='i'||ch=='o'||ch=='u')||(ch=='A'|| ch=='E' || ch=='I'|| ch=='O'|| ch=='U'))

#define bug cout<<"BUG"<<endl;

const int Max = 1e5 + 10;

const int Mod = 1e9 + 7;

const double PI  =3.141592653589793238463;

bool compare(const pair<ll,ll> &a, const pair<ll,ll> &b)

{

       return (a.first > b.first);

}

ll lcm(ll a,ll b)

{

    if(a==0 || b==0)return 0;



    return a/__gcd(a,b)*b;

}



void input(ll ara[],ll n)

{

    for(ll i=0; i<n; i++)cin>>ara[i];

}



ll dp[Max+2];



ll ara[Max],n;



ll call(ll val)

{

    //cout<<i<<" "<<val<<endl;



     ll &ret=dp[val];





       if(ret!=-1)

        return ret;



       if(val==0)return dp[val]=0;



       ret=0;



          for(ll i=0; i<n && !ret; i++)

          {

              if(ara[i]<=val)

                ret=!call(val-ara[i]);

          }



          return ret;





}





int main()

{



   fastread();



   ll i,j,m,p,a,sum=0,k,t,b,c,d,cnt=0,q,l,r;





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



      cin>>n>>m;



      input(ara,n);







        if(call(m))

            cout<<"First"<<endl;



        else cout<<"Second"<<endl;











}








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

using namespace std;

bool dp[100005];

vector <int> a;

int N, K, temp;

int main(){

	scanf("%d%d", &N, &K);

	memset(dp, 0, sizeof(dp));

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

		scanf("%d", &temp);

		a.push_back(temp);

		dp[temp] = true;

	}

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

		bool win = false;

		for(auto j : a){

			if(i - j < 0) continue;

			if(dp[i-j] == false){

				win = true;

				break;

			}

		}

		if(win) dp[i] = true;

	}

	if(dp[K]) cout <<"First"<<endl;

	else cout << "Second"<<endl;





}
// Slower C++ solution:
//       Author: Mostafa Mounir Shehab

 

#include <bits/stdc++.h>

using namespace std;

 

#define PI  acos(-1)

#define EPS (1e-10)

#define endl "\n"

#define SZ(v) (int)(v.size())

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

typedef long long ll;

typedef long double ld;

 

 

 

ll MOD=1e9 + 7;

ll OO=1e9 + 7;

const int N=1e5 + 10,M = 2750131 + 1;

int arr[N];

int vis[N];



int n,m,k,T,lvl,comp;

int a,b,c;



int dx[]={0,0,-1,1};

int dy[]={-1,1,0,0}; 





bool Solve(){

	

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

		bool flage = false;

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

			flage |= !vis[i-arr[j]];

			

		vis[i] = flage;

	}

	

	return vis[k];

}







int main(){

	

	//freopen("algoritm.in","r",stdin);

//	freopen("algoritm.out","w",stdout);

	IO

	cin>>n>>k;

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

		cin>>arr[i];

	sort(arr,arr+n);

	

	cout<<(Solve() ? "First" : "Second")<<endl;

	

	return 0;

}

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

using namespace std;

bool dp[100005];

vector <int> a;

int N, K, temp;

int main(){

	scanf("%d%d", &N, &K);

	memset(dp, 0, sizeof(dp));

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

		scanf("%d", &temp);

		a.push_back(temp);

		dp[temp] = true;

	}

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

		bool win = false;

		for(auto j : a){

			if(i - j < 0) continue;

			if(dp[i-j] == false){

				win = true;

				break;

			}

		}

		if(win) dp[i] = true;

	}

	if(dp[K]) cout <<"First"<<endl;

	else cout << "Second"<<endl;





}