#include <bits/stdc++.h>

#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("avx")

//#include <ext/pb_ds/assoc_container.hpp>
//#include <ext/pb_ds/tree_policy.hpp>
//using namespace __gnu_pbds;
using namespace std;
//template<class T> using oset = tree<T, null_type, less<>, rb_tree_tag, tree_order_statistics_node_update>;

#define int long long
#define all(a) a.begin(), a.end()
#define rall(a) a.rbegin(), a.rend()

//struct sgt{
//    int n;
//    vector<int> t;
//    void build(int v, int l,int r, vector<int> &a){
//        if(r-l == 1){
//            if(l < a.size()){
//                t[v] = a[l];
//            }
//            return;
//        }
//        int m=(l+r)/2;
//        build(2*v+1, l, m, a);
//        build(2*v+2, m, r, a);
//        t[v] = max(t[2*v+1], t[2*v+2]);
//    }
//    sgt(vector<int> &a){
//        n = 1;
//        while(n < a.size()){
//            n *= 2;
//        }
//        t.assign(2*n-1, 0);
//        build(0, 0, n, a);
//    }
//
//    void upd(int v, int l, int r, int i){
//        if(r-l == 1){
//            t[v]++;
//            return;
//        }
//        int m = (l+r)/2;
//        if(i < m){
//            upd(2*v+1, l, m, i);
//        }else{
//            upd(2*v+2, m, r, i);
//        }
//        t[v] = max(t[2*v+1], t[2*v+2]);
//    }
//    void upd(int i){
//        upd(0, 0, n, i);
//    }
//
//    int get(int v, int l, int r, int lq, int rq){
//        if(r <= lq || rq <= l){
//            return 0;
//        }
//        if(l >= lq && r <= rq){
//            return t[v];
//        }
//        int m = (l+r)/2;
//        return max(get(2*v+1, l, m, lq, rq), get(2*v+2, m, r, lq, rq));
//    }
//    int get(int l, int r){
//        if(l > r){
//            return 0;
//        }
//        return get(0, 0, n, l, r);
//    }
//};
int inf = 1e9;
void solve() {
    int n, m;
    cin >> n >> m;
    vector<int> a(n), b(n), c(m);
    vector<vector<int>> s;
    for (int i = 0; i < n; ++i) {
        cin >> a[i];
        s.push_back({a[i], 0, i});
    }
    for (int i = 0; i < n; ++i) {
        cin >> b[i];
        //s.push_back({b[i], 1});
    }
    for (int i = 0; i < m; ++i) {
        cin >> c[i];
        s.push_back({c[i], 2});
    }
    bool flag =0 ;
    int cur =0;
    sort(all(s));
    while(cur < s.size()){
        vector<int> v = s[cur];
        cur++;
        if(v[1] == 0){
            if(cur%2 == 0){
                cout << "First";
            }else{
                cout << "Second";
            }
            return;
        }
    }

}

signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    int tt = 1;
    //cin >> tt;
    while(tt--) {
        solve();
        //cout << '\n';
    }
    return 0;
}
