// Author : Chi
// created : 2020-05-28 12:00
// Sawal : https://www.codechef.com/problems/ECJAN20E

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

//namespaces
using    namespace __gnu_pbds;
using    namespace std;
typedef tree <int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update > ordered_set;

//macros
#define ll 		    long long
#define ss          second
#define ff          first
#define vi          vector<int>
#define vll         vector<long long>
#define pb(x)       push_back(x)
#define TEST  	    int TesT;cin>>TesT;while(TesT--)solve();
#define TEST1       solve();
#define mod         1000000007
#define r0n(i,n)    for(ll i = 0; i < n; ++i)
#define r1n(i,n)    for(ll i = 1; i <= n; ++i)
#define pdp(d,i)    fixed<<setprecision(i)<<d
#define CHI         ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
#define db(...)     __f(#__VA_ARGS__, __VA_ARGS__)                      //for debugging
template <typename Arg1>
void __f(const char* name, Arg1&& arg1) { cout << name << " : " << arg1 <<'\n'; }
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...);
}
int n;
int *a;
int mex(set<int>s){
    int m=0;
    while(s.find(m)!=s.end())m++;
    return m;
}
map<int,int>G;
int grundy(int k){
    if(k==0)
        return 0;
    if(G.count(k))
        return G[k];
    set<int>s;
    r0n(i,n){
        if(k-a[i]<0)
            break;
        s.insert(grundy(k-a[i]));
    }
    return G[k]=mex(s);
}

void solve(){
    int k;
    cin>>n>>k;
    a=new int[n];
    sort(a,a+n);
    r0n(i,n)
    cin>>a[i];
    if(grundy(k))
        cout<<"First\n";
    else
        cout<<"Second\n";
    G.clear();
}
// Driver Code
int main(){
    CHI
    TEST1
    return 0;
}

