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

 

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

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

 

//using namespace __gnu_pbds; 

 

//#define ordered_set tree<ll, null_type,less<ll>, rb_tree_tag,tree_order_statistics_node_update> 

 

//#include <boost/math/common_factor.cpp>

using namespace std;

#define             fi                  first

#define             sec                 second

#define             mod                 1000000007

#define             MOD                 998244353

#define             mod9                1000000009

#define             ll                  long long

#define             ld                  long double

#define             int                 long long

#define             pii                 pair<int ,int>

#define             pll                 pair<ll,ll>

#define             pb                  push_back

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

#define             repr(i,a,b)         for(i=a;i>=(int)b;i--)

#define             mp                  make_pair

#define             t()                 int t;cin>>t;while(t--)

#define             vll                 vector<ll>

#define             setbits(x)          __builtin_popcountll(x)

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

#define             N                   1000000000

#define             cMAXN                100

#define             endl                  '\n'

#define zro(x)      __builtin_ctzll(x)

//#define T pair<int, int>

//#define ordered_set tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>

   

#define TRACE

#ifdef TRACE

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

    template <typename Arg1>

    void __f(const char* name, Arg1&& arg1){

        cout << name << " : " << arg1 << endl;

        //use cerr if u want to display at the bottom

    }

    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...);

    }

#else

#define trace(...)

#endif

bool isV(char x){if(x=='a'||x=='e'||x=='i'||x=='o'||x=='u'){return 1;}return 0;}

bool isP(ll n){for(ll i=2;i*i<=n;i++){if(n%i==0)return 0;}return 1;} 

 

 

void fio()

{

    #ifndef ONLINE_JUDGE

    // for getting input from input.txt

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

    // for writing output to output.txt

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

    #endif

   ios_base::sync_with_stdio(false);

   cin.tie(NULL);

   cout.tie(0);

}

void print(int*a,int n){

    int i;

    rep(i,0,n){

        cout<<a[i]<<" ";

    }

    cout<<endl;

}

void print2d(int a[][1000],int m,int n){

    int i,j;

    rep(i,0,m){

        rep(j,0,n){

            cout<<setw(2)<<a[i][j];

        }

        cout<<endl;

    }

} 

/*bool comp(pii i1, pii i2) 

{

    //For Ascending Order (i1.fi < i2.sec)

    if(i1.sec == i2.sec)

        return (i1.fi > i2.fi);

 

    return (i1.sec > i2.sec); 

}*/ 

 

//All Functions below this

int*a;int n,k;

int call(int st,int turn,int d[][100001])

{

    if(st<*min_element(a,a+n))

    {

        return 0;

    }    

    else if(d[turn][st]!=-1)

        return d[turn][st];

    else

    {

        int i=0,ans=0;

        while(i<n &&a[i]<=st)

        {

            ans +=  (1^call(st-a[i],turn^1,d) ) ;

            i++;

        }

        d[turn ][st] = (!(ans==0)) ; 

        return !(ans==0) ; 

    }



}

//Main Function

int32_t main()

{

    //fio();

    cin>>n>>k;

    a=new int[n];

    int i,j;

    rep(i,0,n)  

    {

        cin>>a[i];

    }

    int d[2][100001];

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

    if(call(k,0,d))

        cout<<"First\n";

    else

        cout<<"Second\n";



}   




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

 

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

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

 

//using namespace __gnu_pbds; 

 

//#define ordered_set tree<ll, null_type,less<ll>, rb_tree_tag,tree_order_statistics_node_update> 

 

//#include <boost/math/common_factor.cpp>

using namespace std;

#define             fi                  first

#define             sec                 second

#define             mod                 1000000007

#define             MOD                 998244353

#define             mod9                1000000009

#define             ll                  long long

#define             ld                  long double

#define             int                 long long

#define             pii                 pair<int ,int>

#define             pll                 pair<ll,ll>

#define             pb                  push_back

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

#define             repr(i,a,b)         for(i=a;i>=(int)b;i--)

#define             mp                  make_pair

#define             t()                 int t;cin>>t;while(t--)

#define             vll                 vector<ll>

#define             setbits(x)          __builtin_popcountll(x)

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

#define             N                   1000000000

#define             cMAXN                100

#define             endl                  '\n'

#define zro(x)      __builtin_ctzll(x)

//#define T pair<int, int>

//#define ordered_set tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>

   

#define TRACE

#ifdef TRACE

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

    template <typename Arg1>

    void __f(const char* name, Arg1&& arg1){

        cout << name << " : " << arg1 << endl;

        //use cerr if u want to display at the bottom

    }

    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...);

    }

#else

#define trace(...)

#endif

bool isV(char x){if(x=='a'||x=='e'||x=='i'||x=='o'||x=='u'){return 1;}return 0;}

bool isP(ll n){for(ll i=2;i*i<=n;i++){if(n%i==0)return 0;}return 1;} 

 

 

void fio()

{

    #ifndef ONLINE_JUDGE

    // for getting input from input.txt

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

    // for writing output to output.txt

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

    #endif

   ios_base::sync_with_stdio(false);

   cin.tie(NULL);

   cout.tie(0);

}

void print(int*a,int n){

    int i;

    rep(i,0,n){

        cout<<a[i]<<" ";

    }

    cout<<endl;

}

void print2d(int a[][1000],int m,int n){

    int i,j;

    rep(i,0,m){

        rep(j,0,n){

            cout<<setw(2)<<a[i][j];

        }

        cout<<endl;

    }

} 

/*bool comp(pii i1, pii i2) 

{

    //For Ascending Order (i1.fi < i2.sec)

    if(i1.sec == i2.sec)

        return (i1.fi > i2.fi);

 

    return (i1.sec > i2.sec); 

}*/ 

 

//All Functions below this

int*a;int n,k;

int call(int st,int turn,int d[][100001])

{

    if(st<*min_element(a,a+n))

    {

        return 0;

    }    

    else if(d[turn][st]!=-1)

        return d[turn][st];

    else

    {

        int i=0,ans=0;

        while(i<n &&a[i]<=st)

        {

            ans +=  (1^call(st-a[i],turn^1,d) ) ;

            i++;

        }

        d[turn ][st] = (!(ans==0)) ; 

        return !(ans==0) ; 

    }



}

//Main Function

int d[2][100001];



int32_t main()

{

    //fio();

    cin>>n>>k;

    a=new int[n];

    int i,j;

    rep(i,0,n)  

    {

        cin>>a[i];

    }

        

    d[0][0]=1;

    d[1][0]=0;



    rep(i,1,k+1)

    {

        int &t1 = d[0][i];

        rep(j,0,n)

        {

            if( i-a[j]>=0 && d[1][i-a[j]]==0)

            {

                t1=0;

                break;

            }

        }

        if(j==n)t1=1;

        int &t2 = d[1][i];

        rep(j,0,n)

        {

            if( i-a[j]>=0 && d[0][i-a[j]]==1)

            {

                t2=1;

                break;

            }

        }

    }



    if(d[0][k]==0)

        cout<<"First\n";

    else

        cout<<"Second\n";

}   




// Fastest known solution for this problem: