func_code_string: #include <bits/stdc++.h>   using namespace std;   const int INF = 0x6fffffff;   const int MINF = 0x80000000;   const int mod = 1000000007;   const int cons = 100001;   const double pi = 3.141592653589793;   int dy2[2] = {1, 0};   int dx2[2] = {0, -1};   int dy1[2] = {0, 1};   int dx1[2] = {1, 0};   int n, m;   int main() {     vector<vector<bool> > M;     vector<vector<int> > km, lm;     scanf( %d%d , &n, &m);     M.resize(n + 1, vector<bool>(m + 1, false));     km.resize(n + 1, vector<int>(m + 1, -1));     lm.resize(n + 1, vector<int>(m + 1, -1));     vector<pair<int, int> > pos[10005];     queue<pair<int, int> > qu;     qu.push(make_pair(1, 1));     km[1][1] = 2;     pos[2].push_back(make_pair(1, 1));     while (!qu.empty()) {       int y = qu.front().first;       int x = qu.front().second;       qu.pop();       for (int i = 0; i < 2; i++) {         int ty = y + dy1[i];         int tx = x + dx1[i];         if (ty < 1 || ty > n || tx < 1 || tx > m) continue;         if (km[ty][tx] != -1) continue;         km[ty][tx] = km[y][x] + 1;         pos[km[ty][tx]].push_back(make_pair(ty, tx));         qu.push(make_pair(ty, tx));       }     }     qu.push(make_pair(1, m));     lm[1][m] = 2;     while (!qu.empty()) {       int y = qu.front().first;       int x = qu.front().second;       qu.pop();       for (int i = 0; i < 2; i++) {         int ty = y + dy2[i];         int tx = x + dx2[i];         if (ty < 1 || ty > n || tx < 1 || tx > m) continue;         if (lm[ty][tx] != -1) continue;         lm[ty][tx] = lm[y][x] + 1;         qu.push(make_pair(ty, tx));       }     }     map<int, int> K, L;     int k;     scanf( %d , &k);     for (int i = 1; i <= k; i++) {       int x;       scanf( %d , &x);       K[x]++;     }     int l;     scanf( %d , &l);     for (int i = k + 1; i <= l + k; i++) {       int x;       scanf( %d , &x);       L[x]++;     }     for (int i = n + m; i >= 2; i--) {       for (int j = 0; j < pos[i].size(); j++) {         int y = pos[i][j].first;         int x = pos[i][j].second;         int lvl = lm[y][x];         auto it = K.lower_bound(i);         auto it2 = L.lower_bound(lvl);         if (it == K.end() && it2 == L.end()) {           puts( NO );           return 0;         } else if (it == K.end()) {           it2->second--;           if (it2->second == 0) {             L.erase(it2);           }         } else if (it2 == L.end()) {           it->second--;           if (it->second == 0) {             K.erase(it);           }         } else {           it2->second--;           if (it2->second == 0) {             L.erase(it2);           }         }       }     }     puts( YES );     return 0;   }   