#include <iostream>
#include <vector>
#include <algorithm>
#include <stdio.h>
#include <stdlib.h>
#include <set>

using namespace std;

const long long maxN = 50005;
const long long maxC = 1000005;

long long st_sumb[maxC*4];
long long st_sumbc[maxC*4];

void inc(long long l, long long r, long long v, long long i, long long x)
{
    if(l == r)
    {
        st_sumb[v] += x;
        st_sumbc[v] = i*st_sumb[v];
        return;
    }

    long long m = (l+r)/2;

    if(i <= m) inc(l, m, v*2, i, x);
    else inc(m+1, r, v*2+1, i, x);

    st_sumb[v] = st_sumb[v*2] + st_sumb[v*2+1];
    st_sumbc[v] = st_sumbc[v*2] + st_sumbc[v*2+1];
}

long long get(long long l, long long r, long long v, long long a, long long b)
{
    if(b < l || a > r) return 0;

    if(l == a && r == b) return st_sumbc[v];

    long long m = (l+r)/2;

    return get(l, m, v*2, a, min(b, m)) + get(m+1, r, v*2+1, max(a, m+1), b);
}

long long get_b(long long l, long long r, long long v, long long a, long long b)
{
    if(b < l || a > r) return 0;

    if(l == a && r == b) return st_sumb[v];

    long long m = (l+r)/2;

    return get_b(l, m, v*2, a, min(b, m)) + get_b(m+1, r, v*2+1, max(a, m+1), b);
}

long long get_i(long long l, long long r, long long v, long long s)
{
    if(l == r)
    {
        if(st_sumb[v] <= s) return l;
        else return l+1;
    }

    long long m = (l+r)/2;
    if(st_sumb[v*2+1] > s) return get_i(m+1, r, v*2+1, s);
    else return get_i(l, m, v*2, s - st_sumb[v*2+1]);
}

struct Prom
{
    long long x, a;
};

struct Base
{
    long long x, b, c;
};

Prom pr[maxN];
Base bs[maxN];

struct Ev
{
    long long x;
    long long t, i;
    Ev(){}
    Ev(long long _x, long long _t, long long _i)
    {
        x = _x;
        t = _t;
        i = _i;
    }
};

bool operator < (Ev e1, Ev e2)
{
    return e1.x < e2.x;
}

vector<Ev> ev;


int main()
{
    //cout << "--" << endl;

    for(long long i = 0; i < maxC*4; i++)
    {
        st_sumb[i] = 0;
        st_sumbc[i] = 0;
    }

    freopen("fisher.in", "r", stdin);
    freopen("fisher.out", "w", stdout);

    iostream::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);


    long long n, m, p;
    cin >> n >> m >> p;

    for(long long i = 0; i < n; i++)
    {
        cin >> pr[i].x >> pr[i].a;
        ev.push_back(Ev(pr[i].x, 1, i));
    }

    for(long long i = 0; i < m; i++)
    {
        cin >> bs[i].x >> bs[i].b >> bs[i].c;
        ev.push_back(Ev(bs[i].x, 2, i));
    }

    sort(ev.begin(), ev.end());


    long long ans = 0;

    long long sum_a = 0;
    for(long long i = 0; i < ev.size(); i++)
    {
        if(ev[i].t == 1)
        {
            sum_a += pr[ev[i].i].a;
        }
        else
        {
            inc(0, maxC-1, 1, bs[ev[i].i].c, bs[ev[i].i].b);
        }

        long long lans = -p * ev[i].x;
        long long k = get_i(0, maxC-1, 1, sum_a);

        long long s = sum_a;
        if(k < maxC)
        {
            lans += get(0, maxC-1, 1, k, maxC-1);
            s -= get_b(0, maxC-1, 1, k, maxC-1);
        }

        if(k != 0) lans += (k-1)*s;

        ans = max(ans, lans);
    }

    cout << ans << endl;








    return 0;
}
