
    #include <bits/stdc++.h>
    #include <ext/pb_ds/assoc_container.hpp>
    #include <ext/pb_ds/tree_policy.hpp>

    #define ll long long
    #define pb push_back
    #define mp make_pair
    #define f first
    #define s second
    #define sz(x) (int)x.size()
    #define all(x) x.begin(), x.end()

    using namespace std;
    using namespace __gnu_pbds;

    mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
    template<class T> using ordered_set = tree<T, null_type, less<T>, rb_tree_tag,tree_order_statistics_node_update>; ///find_by_order(),order_of_key()
    template<class T1, class T2> ostream& operator<<(ostream& os, const pair<T1,T2>& a) { os << '{' << a.f << ", " << a.s << '}'; return os; }
    template<class T> ostream& operator<<(ostream& os, const vector<T>& a){os << '{';for(int i=0;i<sz(a);i++){if(i>0&&i<sz(a))os << ", ";os << a[i];}os<<'}';return os;}
    template<class T> ostream& operator<<(ostream& os, const set<T>& a) {os << '{';int i=0;for(auto p:a){if(i>0&&i<sz(a))os << ", ";os << p;i++;}os << '}';return os;}
    template<class T> ostream& operator<<(ostream& os, const multiset<T>& a) {os << '{';int i=0;for(auto p:a){if(i>0&&i<sz(a))os << ", ";os << p;i++;}os << '}';return os;}
    template<class T1,class T2> ostream& operator<<(ostream& os, const map<T1,T2>& a) {os << '{';int i=0;for(auto p:a){if(i>0&&i<sz(a))os << ", ";os << p;i++;}os << '}';return os;}
    template<class T1,class T2> ostream& operator<<(ostream& os, const gp_hash_table<T1,T2>& a) {os << '{';int i=0;for(auto p:a){if(i>0&&i<sz(a))os << ", ";os << p;i++;}os << '}';return os;}

    double dp[100050];

    vector<int> a;
    int n, k;

    double nadji(int k)
    {
        if(k < 0)
            return 1;
        if(dp[k]!=-1)
            return dp[k];


       // bool drugiGubi = false;

       //cout << "proveravam za k " << k << endl;


        for(int i =0; i<n; i++)
        {
             //cout << "proveravam za k-a " << k-a[i] << endl;

            if(nadji(k-a[i])==0)
            {
               // cout << "naso za " << k << endl;
                dp[k]=1;
                return 1;
            }
        }

        dp[k] = 0;
        return 0;


    }

    int main()
    {


        vector<int> a;

        cin >> n>>k;
        int m=100050;
        for(int i=0; i <n; i++)
        {
            int pom;
            cin >> pom;
            a.push_back(pom);
            m=min(m, pom);
        }

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

        for(int i=0; i <m; i++)
        {
            dp[i]=0; //trenutni ne pobedjuje
        }

        int res = nadji(k);

        if(res==1)
            cout << "First" << endl;
        else
            cout << "Second" << endl;

        return 0;
    }
