#include <bits/stdc++.h>
#define int long long
#define IOS {std::ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);}
#define CLEAR(a) {memset(a, 0, sizeof(a));}
#define undirectedEdge(u, v, w) {e[u].push_back(edge(u, v, w)); e[v].push_back(edge(v, u, w));}
using namespace std;
#define endl '\n'
const int INF = 0x3f3f3f3f3f3f3f3f;
const int inf = 0x3f3f3f3f;
const int MAXN = 2e6 + 10;
const int maxn = 2e5 + 10;
priority_queue<int> q;
int d[maxn], l[maxn];
vector<int> a[maxn];
void solve(){
int n, m, L, k = 1;
cin>>n>>m>>L;
for(int i = 0; i <= n; ++ i)
{
a[i].clear();
d[i] = 0;
l[i] = 0;
}
while(!q.empty ())
{
q.pop ();
}
for(int i = 1; i <= n; ++ i)
{
int r;
cin>>l[i]>>r;
d[i] = r - l[i] + 1;
}
for(int i = 1; i <= m; ++ i)
{
int len, index, buf;
cin>>len>>buf;
index = (lower_bound(l + 1, l + n + 1, len) - l);
a[index].push_back (buf);
}
int ans = 0;
for(int i = 1; i <= n; ++ i)
{
for(auto e:a[i])
q.push (e);
while(k <= d[i] && !q.empty ())
{
k += q.top ();
q.pop ();
ans ++;
}
if(q.empty() && k <= d[i])
{
cout<<-1<<endl;
return;
}
}
cout<<ans<<endl;
}
signed main(){
IOS;
int t = 1;
cin>>t;
while(t--)
solve();
return 0;
}