#include <bits/stdc++.h>
long long n, m, Q;
long long T;
std::vector<long long> req, l, r;
std::vector<long long> fill(std::vector<long long>& req) {
  std::vector<long long> ans(m + 1);
  long long tem = T;
  for (long long i = m; i; i--) {
    ans[i] = 0;
    if (i < m) ans[i] = ans[i + 1];
    if (~req[i]) ans[i] = req[i];
    tem -= ans[i];
  }
  if (tem < 0) return std::vector<long long>();
  for (long long i = m, last = m + 1; tem && ~i; i--) {
    if (~req[i]) {
      long long mx = (i < m) ? (last - 1 - i) * (req[i] - ans[i + 1]) : 0;
      if (mx <= tem) {
        for (long long j = i + 1; j < last; j++) ans[j] = req[i];
        tem -= mx;
      } else {
        for (long long j = i + 1; j < last; j++)
          ans[j] +=
              (tem / (last - 1 - i)) + ((tem % (last - 1 - i)) >= (j - i));
        tem = 0;
      }
      last = i;
    }
  }
  if (tem) return std::vector<long long>();
  return ans;
}
long long q[100001], h, t;
bool check(std::vector<long long> a, std::vector<long long> b) {
  long long n = (long long)a.size() - 1, m = (long long)b.size() - 1;
  h = t = 0;
  for (long long i = 2; i <= n; i++) a[i] += a[i - 1];
  for (long long i = 2; i <= m; i++) b[i] += b[i - 1];
  for (long long i = 1; i <= n; i++) a[i] -= 1ll * i * m;
  for (long long i = 1; i <= m; i++) b[i] -= 1ll * i * n;
  for (long long i = 1; i <= m; i++) {
    while (h < t - 1 && (1ll * (b[q[t]] - b[i]) * (q[t] - q[t - 1]) >=
                         1ll * (b[q[t - 1]] - b[q[t]]) * (i - q[t])))
      --t;
    q[++t] = i;
  }
  for (long long i = 1; i <= n; i++) {
    while (h < t - 1 && (b[q[t]] + q[t] * i) >= (b[q[t - 1]] + q[t - 1] * i))
      --t;
    if (b[q[t]] + q[t] * i < a[n] - a[i]) return 0;
  }
  return 1;
}
bool judge(long long x, long long y = -1) {
  std::vector<long long> Req = req;
  if (~y) {
    for (long long i = 1; i <= x; i++) Req[i] = y;
  }
  std::vector<long long> now = fill(Req);
  if (now.empty()) return 0;
  if (now[1] != now[x]) {
    for (long long i = 1; i <= x; i++)
      if (~req[i] && req[i] != now[1]) return 0;
    for (long long i = 1; i <= x; i++) Req[i] = now[1];
    now = fill(Req);
    if (now.empty()) return 0;
  }
  std::reverse(now.begin() + 1, now.end());
  return check(l, now) & check(now, r);
}
signed main() {
  scanf("%lld%lld", &n, &m);
  l.resize(n + 1), r.resize(n + 1);
  for (long long i = 1; i <= n; i++) scanf("%lld%lld", &l[i], &r[i]);
  std::sort(l.begin() + 1, l.end());
  std::sort(r.begin() + 1, r.end());
  req.resize(m + 1);
  for (long long i = 1; i <= m; i++) req[i] = -1;
  req[0] = 0x7f7f7f7f;
  scanf("%lld", &Q);
  for (long long i = 1, a, b; i <= Q; i++) {
    scanf("%lld%lld", &a, &b);
    req[a] = b;
  }
  scanf("%lld", &T);
  long long l = 1, r = m, mid, ans = -1;
  while (l <= r) {
    mid = (l + r) >> 1;
    if (judge(mid))
      ans = mid, l = mid + 1;
    else
      r = mid - 1;
  }
  if (!~ans) {
    printf("-1 -1");
    return 0;
  }
  for (long long i = 1; i <= ans; i++)
    if (~req[i]) {
      printf("%lld %lld\n", ans, req[i]);
      return 0;
    }
  l = fill(req)[1], r = n;
  long long ans1;
  while (l <= r) {
    mid = (l + r) >> 1;
    if (judge(ans, mid))
      ans1 = mid, l = mid + 1;
    else
      r = mid - 1;
  }
  printf("%lld %lld\n", ans, ans1);
}
