func_code_string: #include <bits/stdc++.h>   using namespace std;   static int io_sync_off = []() {     ios::sync_with_stdio(false);     cin.tie(nullptr);     return 0;   }();   long long Pow(long long a, long long b, long long mod) {     long long res = 1;     a %= mod;     while (b) {       if (b & 1) (res *= a) %= mod;       (a *= a) %= mod;       b >>= 1;     }     return res % mod;   }   long long inv(long long a, long long p) {     if (a == 1) return 1;     return (p - p / a) * inv(p % a, p) % p;   }   long long C(long long n, long long m, long long p) {     long long res = 1;     for (long long i = 1, j = n - m + 1; i <= m; ++i, ++j) {       res = res * inv(i, p) % p * j % p;     }     return res;   }   const int N = 2e5 + 10;   struct M {     bool operator<(const M &t) const { return x < t.x; }     int x, y, z;   };   long long Max[N * 4], tag[N * 4];   void push_down(int o) {     int lc = 2 * o, rc = 2 * o + 1;     tag[lc] += tag[o];     tag[rc] += tag[o];     Max[lc] += tag[o];     Max[rc] += tag[o];     tag[o] = 0;   }   void update(int a, int b, int v, int o, int l, int r) {     if (a == b) return;     if (a <= l && b >= r) {       tag[o] += v;       Max[o] += v;       return;     }     push_down(o);     int mid = (l + r) >> 1, lc = 2 * o, rc = 2 * o + 1;     if (a < mid) update(a, b, v, lc, l, mid);     if (b > mid) update(a, b, v, rc, mid, r);     Max[o] = max(Max[lc], Max[rc]);   }   M Mon[N];   pair<long long, long long> a[N], b[N];   int d[N];   void build(int o, int l, int r) {     if (r - l == 1) {       Max[o] = -b[l].second;       return;     }     int mid = (l + r) >> 1, lc = 2 * o, rc = 2 * o + 1;     build(lc, l, mid);     build(rc, mid, r);     Max[o] = max(Max[lc], Max[rc]);   }   int main() {     int n, m, p;     scanf( %d%d , &n, &m);     scanf( %d , &p);     for (int i = 0; i < n; ++i) scanf( %d%d , &a[i].first, &a[i].second);     for (int i = 0; i < m; ++i) scanf( %d%d , &b[i].first, &b[i].second);     for (int i = 0; i < p; ++i) scanf( %d%d%d , &Mon[i].x, &Mon[i].y, &Mon[i].z);     sort(a, a + n);     sort(b, b + m);     sort(Mon, Mon + p);     for (int i = 0; i < m; ++i) d[i] = b[i].first;     build(1, 0, m);     long long ans = -1e18;     int j = 0;     for (int i = 0; i < n; ++i) {       while (j < p && Mon[j].x < a[i].first) {         int l = upper_bound(d, d + m, Mon[j].y) - d;         update(l, m, Mon[j++].z, 1, 0, m);       }       ans = max(ans, Max[1] - a[i].second);     }     printf( %lld , ans);     return 0;   }   