#include using namespace std; struct fast_ios { fast_ios(){ cin.tie(0); ios::sync_with_stdio(false); cout << fixed << setprecision(20); }; } fast_ios_; #define FOR(i, begin, end) for(int i=(begin),i##_end_=(end);i istream &operator>>(istream &is, vector &vec){ for (auto &v : vec) is >> v; return is; } template ostream &operator<<(ostream &os, const vector &vec){ os << "["; for (auto v : vec) os << v << ","; os << "]"; return os; } template ostream &operator<<(ostream &os, const deque &vec){ os << "deq["; for (auto v : vec) os << v << ","; os << "]"; return os; } template ostream &operator<<(ostream &os, const pair &pa){ os << "(" << pa.first << "," << pa.second << ")"; return os; } #define dbg(x) cerr << #x << " = " << (x) << " (L" << __LINE__ << ") " << __FILE__ << endl; void No() { puts("NO"); exit(0); } int main() { int N, M; cin >> N >> M; vector A(M + 2); A[M + 1] = N + 1; REP(i, M) cin >> A[i + 1]; vector> lazy(M + 2); auto resolve = [&](auto &&f, int pos, int now) -> void { if (A[pos - 1] + 1 == A[pos] and A[pos] + 1 == A[pos + 1]) { No(); } if (A[pos - 1] + 1 == A[pos]) { lazy[pos].pop_front(); A[pos]++; while (lazy[pos + 1].size() > 1 and lazy[pos + 1][1] < now) { lazy[pos + 1].pop_front(); lazy[pos + 1].pop_front(); } if (lazy[pos + 1].size()) f(f, pos + 1, lazy[pos + 1].front()); } else if (A[pos] + 1 == A[pos + 1]) { lazy[pos].pop_front(); A[pos]--; while (lazy[pos - 1].size() > 1 and lazy[pos - 1][1] < now) { lazy[pos - 1].pop_front(); lazy[pos - 1].pop_front(); } if (lazy[pos - 1].size()) f(f, pos - 1, lazy[pos - 1].front()); } }; int Q; cin >> Q; REP(t, Q) { int b; cin >> b; lazy[b].emplace_back(t); resolve(resolve, b, t); } puts("YES"); }