#include <bits/stdc++.h>
using namespace std;
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  long long fisic, infor, amplio;
  cin >> fisic >> infor >> amplio;
  vector<pair<long long, long long> > fisica(fisic);
  vector<pair<long long, long long> > informatica(infor);
  for (int x = 0; x < fisic; x++) {
    long long a, b;
    cin >> a >> b;
    fisica[x] = make_pair(a, b);
  }
  for (int x = 0; x < infor; x++) {
    long long a, b;
    cin >> a >> b;
    informatica[x] = make_pair(a, b);
  }
  sort(fisica.rbegin(), fisica.rend());
  sort(informatica.rbegin(), informatica.rend());
  auto s = fisica.begin();
  auto a = s;
  while (s != fisica.end()) {
    reverse(a, s);
    a = s;
    pair<long long, long long> b, c;
    b = *a;
    c = *s;
    while (b.first == c.first) {
      s++;
      if (s == fisica.end()) {
        break;
      }
      c = *s;
    }
  }
  reverse(a, s);
  auto f = informatica.begin();
  a = f;
  while (f != informatica.end()) {
    reverse(a, f);
    a = f;
    pair<long long, long long> b, c;
    b = *a;
    c = *f;
    while (b.first == c.first) {
      f++;
      if (f == fisica.end()) {
        break;
      }
      c = *f;
    }
  }
  reverse(a, f);
  for (int x = 1; x < fisic; x++) {
    fisica[x].first += fisica[x - 1].first;
    fisica[x].second += fisica[x - 1].second;
  }
  for (int x = 1; x < infor; x++) {
    informatica[x].first += informatica[x - 1].first;
    informatica[x].second += informatica[x - 1].second;
  }
  long long maxfelicidad = -1;
  for (int x = 0; x < infor; x++) {
    int izq = 0, der = fisic - 1;
    while (izq != der) {
      int med = (izq + der + 1) / 2;
      if (informatica[x].second + fisica[med].second > amplio) {
        der = med - 1;
      } else {
        izq = med;
      }
    }
    if (informatica[x].second + fisica[izq].second <= amplio) {
      maxfelicidad =
          max(maxfelicidad, informatica[x].first + fisica[izq].first);
    }
  }
  if (maxfelicidad == -1) {
    maxfelicidad = 0;
  }
  cout << maxfelicidad << "\n";
}
