Stepan is a very experienced olympiad participant. He has n cups for Physics olympiads and m cups for Informatics olympiads. Each cup is characterized by two parameters — its significance ci and width wi.

Stepan decided to expose some of his cups on a shelf with width d in such a way, that:

  * there is at least one Physics cup and at least one Informatics cup on the shelf, 
  * the total width of the exposed cups does not exceed d, 
  * from each subjects (Physics and Informatics) some of the most significant cups are exposed (i. e. if a cup for some subject with significance x is exposed, then all the cups for this subject with significance greater than x must be exposed too). 



Your task is to determine the maximum possible total significance, which Stepan can get when he exposes cups on the shelf with width d, considering all the rules described above. The total significance is the sum of significances of all the exposed cups.

Input

The first line contains three integers n, m and d (1 ≤ n, m ≤ 100 000, 1 ≤ d ≤ 109) — the number of cups for Physics olympiads, the number of cups for Informatics olympiads and the width of the shelf.

Each of the following n lines contains two integers ci and wi (1 ≤ ci, wi ≤ 109) — significance and width of the i-th cup for Physics olympiads.

Each of the following m lines contains two integers cj and wj (1 ≤ cj, wj ≤ 109) — significance and width of the j-th cup for Informatics olympiads.

Output

Print the maximum possible total significance, which Stepan can get exposing cups on the shelf with width d, considering all the rules described in the statement.

If there is no way to expose cups on the shelf, then print 0.

Examples

Input

3 1 8
4 2
5 5
4 2
3 2


Output

8


Input

4 3 12
3 4
2 4
3 5
3 4
3 5
5 2
3 4


Output

11


Input

2 2 2
5 3
6 3
4 2
8 1


Output

0

Note

In the first example Stepan has only one Informatics cup which must be exposed on the shelf. Its significance equals 3 and width equals 2, so after Stepan exposes it, the width of free space on the shelf becomes equal to 6. Also, Stepan must expose the second Physics cup (which has width 5), because it is the most significant cup for Physics (its significance equals 5). After that Stepan can not expose more cups on the shelf, because there is no enough free space. Thus, the maximum total significance of exposed cups equals to 8.
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100000;
const int MAXM = 100000;
int N, M, D;
int physicsWidth[MAXN], informaticsWidth[MAXM], physicsSignificance[MAXN],
    informaticsSignificance[MAXM];
struct Cup {
  int width;
  int significance;
  const bool operator<(const Cup &other) const {
    if (significance == other.significance) {
      return width < other.width;
    }
    return significance > other.significance;
  }
} physics[MAXN], informatics[MAXM];
void init() {
  scanf("%d %d %d", &N, &M, &D);
  for (int i = 0; i < N; i++) {
    scanf("%d %d", &physics[i].significance, &physics[i].width);
  }
  for (int i = 0; i < M; i++) {
    scanf("%d %d", &informatics[i].significance, &informatics[i].width);
  }
}
void presolve() {
  sort(physics, physics + N);
  sort(informatics, informatics + M);
}
long long solve() {
  int pIdx = 1, iIdx = 1;
  long long totalWidth = physics[0].width + informatics[0].width;
  long long totalSignificance =
      physics[0].significance + informatics[0].significance;
  if (totalWidth > D) return 0;
  while (iIdx < M && totalWidth + informatics[iIdx].width <= D) {
    totalWidth += informatics[iIdx].width;
    totalSignificance += informatics[iIdx].significance;
    iIdx++;
  }
  long long maxSignificance = totalSignificance;
  while (pIdx < N) {
    totalWidth += physics[pIdx].width;
    totalSignificance += physics[pIdx].significance;
    pIdx++;
    while (totalWidth > D) {
      if (iIdx <= 1) return maxSignificance;
      iIdx--;
      totalWidth -= informatics[iIdx].width;
      totalSignificance -= informatics[iIdx].significance;
    }
    if (totalSignificance > maxSignificance) {
      ;
    }
    maxSignificance = max(maxSignificance, totalSignificance);
  }
  return maxSignificance;
}
int main() {
  init();
  presolve();
  cout << solve() << "\n";
  return 0;
}
