RT,老师的Windows机子AC,洛谷CE
const bool Debug = false;
const bool Luogu = true;
const bool Online = false;
const bool Lemon = false;
//#define Debug true
//#define Luogu flase
//#define Online true
//#define Lemon true
#include <set>
#include <map>
#include <list>
#include <queue>
#include <cmath>
#include <ctime>
#include <random>
#include <bitset>
#include <vector>
#include <cstring>
#include <iostream>
#include <algorithm>
#define endl '\n'
#define int long long
#define mod 998244353
#define inf 0x3f3f3f3f
#define lnf 0x3f3f3f3f3f3f3f3f
#ifdef Online
#define getchar() (_1==_2&&(_2=(_1=buf)+fread(buf,1,1<<20,stdin),_1==_2)?EOF:*_1++)
char *_1, *_2, buf[(1 << 20) + 5];
#endif
#define min(a,b) (a<b?a:b)
#define max(a,b) (a<b?b:a)
#define abs(a) (max(a,-a))
#define Deout(x) cout<<#x<<"\t=:="<<x<<endl
#define Deline() cout<<"\n-=--=--=--=--=--=--=--=-\n\n"
#ifdef Luogu
#pragma GCC optimize (1)
#pragma GCC optimize (2)
#pragma GCC optimize (3)
#pragma GCC optimize (4)
#pragma GCC optimize (5)
#pragma GCC optimize ("Os")
#pragma GCC optimize ("Ofast")
#endif
using namespace std;
namespace WTH {
inline bool input (int& x) {
x = 0;
int f = 1;
bool flag = 0;
char c = getchar ();
while (!isdigit(c)) {
if (c == '-') {
c = getchar ();
if (isdigit (c)) {
f = -1;
break;
}
} else {
c = getchar ();
}
}
while (isdigit (c)) {
flag = 1;
x = (x << 3) + (x << 1) + (c ^ 48);
c = getchar ();
}
x *= f;
return flag;
}
inline bool output (int x) {
if (x < 0) {
putchar ('-');
x = -x;
}
char write[25], cnt = 0;
do {
write[++ cnt] = x % 10;
x /= 10;
} while (x);
do {
putchar (write[cnt --] | 48);
} while (cnt);
return x;
}
const int N = 2e3 + 5, T = 1e5 + 5;
int s, t, m, n;
pair <int, int> _Td[T];
#define Begin first
#define End second
int c[N], d[N];
bool _Chck (int i, int j) {
int _;
bool ji;
if (c[i] < d[j]) {
_ = d[j] - c[i];
if (_ >= s) {
return 1;
}
ji = (s - _) & 1;
_ += ((s - _) >> 1);
auto it = upper_bound (_Td + 1, _Td + t + 1, {_, lnf});
-- it;
if (Debug) {
Deout (i);
Deout (j);
Deout (_);
Deout (c[i]);
Deout (d[j]);
Deout (ji);
Deout ((* it).Begin);
Deout ((* it).End);
Deline ();
}
if (((* it).Begin > _) || ((* it).End <= _)){
return 1;
}
if ((* it).Begin == _) {
if (ji) {
return 0;
}
return 1;
}
return 0;
} else {
_ = c[i] - d[j];
if (_ >= s) {
return 1;
}
ji = (s - _) & 1;
_ = ((s - _) >> 1);
auto it = upper_bound (_Td + 1, _Td + t + 1, {_, lnf});
-- it;
if (Debug) {
Deout (i);
Deout (j);
Deout (_);
Deout (c[i]);
Deout (d[j]);
Deout (ji);
Deout ((* it).Begin);
Deout ((* it).End);
Deline ();
}
if (((* it).Begin > _) || ((* it).End <= _)){
return 1;
}
// if (Debug) {
// Deout ("SBSBSB");
// }
//
if ((* it).Begin == _) {
if (ji) {
return 0;
}
return 1;
}
return 0;
}
}
void Init () {
}
void Input () {
input (s);
input (t);
input (m);
input (n);
for (register int i = 1; i <= t; ++ i) {
input (_Td[i].Begin);
}
for (register int i = 1; i <= t; ++ i) {
input (_Td[i].End);
}
for (register int i = 1; i <= m; ++ i) {
input (c[i]);
}
for (register int i = 1; i <= n; ++ i) {
input (d[i]);
}
}
bool Main () {
sort (_Td + 1, _Td + t + 1);
for (register int i = 1; i <= m; ++ i) {
for (register int j = 1; j <= n; ++ j) {
if (_Chck (i, j)) {
continue ;
}
// if (Debug) {
// Deout ("HHH");
// }
//
return 1;
}
}
return 0;
}
void Output (bool Main_Return) {
if (Main_Return) {
putchar ('Y');
putchar ('E');
putchar ('S');
putchar ('\n');
} else {
putchar ('N');
putchar ('O');
putchar ('\n');
}
}
}
signed main () {
#ifdef Lemon
freopen ("railway.in", "r", stdin);
freopen ("railway.out", "w", stdout);
#endif
int T = 1;
//cin >> T;
while (T --) {
WTH :: Init ();
WTH :: Input ();
WTH :: Output (WTH :: Main ());
}
return 0;
}