#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using Int = long long; template ostream &operator<<(ostream &os, const pair &a) { return os << "(" << a.first << ", " << a.second << ")"; }; template ostream &operator<<(ostream &os, const vector &as) { const int sz = as.size(); os << "["; for (int i = 0; i < sz; ++i) { if (i >= 256) { os << ", ..."; break; } if (i > 0) { os << ", "; } os << as[i]; } return os << "]"; } template void pv(T a, T b) { for (T i = a; i != b; ++i) cerr << *i << " "; cerr << endl; } template bool chmin(T &t, const T &f) { if (t > f) { t = f; return true; } return false; } template bool chmax(T &t, const T &f) { if (t < f) { t = f; return true; } return false; } #define COLOR(s) ("\x1b[" s "m") constexpr Int INF = 1001001001001001001LL; int M, N; vector> A, B; int K; vector P; int main() { for (; ~scanf("%d%d", &M, &N); ) { A.resize(M); for (int i = 0; i < M; ++i) scanf("%lld%lld", &A[i].first, &A[i].second); B.resize(N); for (int i = 0; i < N; ++i) scanf("%lld%lld", &B[i].first, &B[i].second); scanf("%d", &K); P.resize(K); for (int k = 0; k < K; ++k) { scanf("%lld", &P[k]); } sort(A.begin(), A.end()); sort(B.begin(), B.end()); bool ov = false; for (int i = 0; i < M - 1; ++i) ov = ov || (A[i].second >= A[i + 1].first); for (int i = 0; i < N - 1; ++i) ov = ov || (B[i].second >= B[i + 1].first); vector ans(K, ov ? 1 : 0); for (int k = 0; k < K; ++k) { for (int j = 0; j < N; ++j) { // L - t <= P[k] <= R - t const Int t0 = B[j].first - P[k]; const Int t1 = B[j].second - P[k]; // L + t <= P[k] <= R + t const Int l = P[k] - t1; const Int r = P[k] - t0; const int i = upper_bound(A.begin(), A.end(), make_pair(r, INF)) - A.begin() - 1; // cerr<= 0 && A[i].second >= l && r >= A[i].first) { ans[k] = 1; } } } for (int k = 0; k < K; ++k) { if (k) printf(" "); printf("%d", ans[k]); } puts(""); } return 0; }