这不是博弈论题目吗。
设 $dp_i$ 表示剩下 $i$ 个石头先手是否能必胜。
那么每次枚举所有子游戏转移而来,只要有一个后手必败就一定可以先手必胜。
#include <bits/stdc++.h>
using namespace std;
const int N = 115, M = 1e5 + 15;
int n, m, a[N];
bool dp[M];
int main() {
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
for (int i = 1; i <= m; i++)
for (int j = 1; j <= n; j++)
if (i >= a[j]) dp[i] |= !dp[i - a[j]];
puts(dp[m] ? "First" : "Second");
return 0;
}