/*这题的思路是:不断取交集,并判断每个取到的交集中,能分出几个大小为3的子集(以双方都通话的天数为集合元素)
//注意,如果没有大于3的子集,那么就说明友谊度不会累加,但也不会扣除,按照原来的计算,不到反而会扣,所以要和0取max
// 参考博客; http://blog.csdn.net/a664607530/article/details/70893623
// 我写的和他略有不同的地方是,我的循环退出条件,改为了枚举完任意一个人的所有区间,则退出...不过这个只是小节,怎么写都无妨,最终是对的就行
*/
#include <iostream>
using namespace std;
struct time
{
int l, r;
}a[105], b[105];
int main()
{
cin.sync_with_stdio(false);
cin.tie(0);
int t, n, m, x, y;
cin >> t;
while (t--)
{
cin >> n >> m >> x >> y;
for (int i = 1; i <= x; i++) cin >> a[i].l >> a[i].r;
for (int i = 1; i <= y; i++) cin >> b[i].l >> b[i].r;
int ii = 1, jj = 1, ans = 0;
while (ii <= x && jj <= y)
{
int mi, ma;
ma = max(a[ii].l, b[jj].l);
mi = min(a[ii].r, b[jj].r);
ans += max(mi - ma - m + 2, 0);
if (a[ii].r < b[jj].r) ii++;
else if (a[ii].r > b[jj].r) jj++;
else ii++, jj++;
}
cout << ans << endl;
}
return 0;
}