#include <bits/stdc++.h>
using namespace std;
template <class A, class B>
ostream& operator<<(ostream& out, const pair<A, B>& a) {
  return out << "(" << a.first << ", " << a.second << ")";
}
template <class A>
ostream& operator<<(ostream& out, const vector<A>& v) {
  out << "[";
  for (int i = 0; i < int(int(v.size())); i++) {
    if (i) out << ", ";
    out << v[i];
  }
  return out << "]";
}
mt19937 rnd(time(NULL));
const int INF = int(1e9);
const long long INF64 = long long(1e18);
const int MOD = INF + 7;
const long double EPS = 1e-9;
const long double PI = acos(-1.0);
const int N = 100 + 7;
const int M = 100 * 1000 + 13;
int n, k;
int a[N];
bool read() {
  if (scanf("%d%d", &n, &k) != 2) return false;
  for (int i = 0; i < int(n); i++) scanf("%d", &a[i]);
  return true;
}
int gr[M];
void solve() {
  set<int> mex;
  for (int i = 0; i < int(M); i++) mex.insert(i);
  gr[0] = 0;
  for (int i = int(1); i < int(k + 1); i++) {
    vector<int> vals;
    for (int j = 0; j < int(n); j++)
      if (a[j] <= i) vals.push_back(gr[i - a[j]]);
    sort(vals.begin(), vals.end());
    vals.resize(unique(vals.begin(), vals.end()) - vals.begin());
    for (auto it : vals) mex.erase(it);
    gr[i] = *mex.begin();
    for (auto it : vals) mex.insert(it);
  }
  puts(gr[k] ? "First" : "Second");
}
int main() {
  cerr.precision(15);
  cout.precision(15);
  cerr << fixed;
  cout << fixed;
  while (read()) {
    solve();
  }
}
