#include <iostream>
#include <algorithm>
#include <vector>
#include <math.h>
#include <cmath>
#include <unordered_map>
#include <map>
#include <deque>
#include <cstdio>
#include <stdio.h>

using namespace std;
typedef long long ll;
	const int maxD = 1e5 + 2;
	 ll prefv[maxD], sel[maxD];
	 pair<int, int> xv[maxD];

int main()
{
	int t;
	cin >> t;
	for(int i = 1; i <= t; ++i)
	{
		int n, R, k;
		ll ans = 0;
		int mini = 1e9;
		cin >> n >> R >> k;
		for(int j = 0; j < n; ++j) 
		{
			int x, v;
			cin >> x >> v;
			xv[j] = make_pair(x, v);
			mini = min(x, mini);
			prefv[j] = 0;
			sel[j] = -1;
		}
		sort(xv, xv + n);
		prefv[0] = xv[0].second;
		for(int j = 1; j < n; ++j) prefv[j] += prefv[j - 1] + xv[j].second;
		for(int j = 0; j < k; ++j)
		{
			int l, r, curl;
			ll best;
			pair<int, int> bestcur;
			l = r = best = curl = 0;
			for(int m = 0; m < n; ++m)
			{
				if( sel[m] != -1 ) 
				{
					m = sel[m];
					curl = m;
					continue;
				}

				l = curl;
				r = m;
				if( xv[m].first - mini <= R * 2 ) 
				{
					if( prefv[m] >= best ) {
						best = prefv[m];
						bestcur = make_pair(m, 0);
						continue;
					}
				}

				while(l + 1 < r)
				{
					int mid = (l + r) >> 1;
					if( xv[m].first - xv[mid + 1].first <= R * 2 ) r = mid;
					else l = mid;
				}
				
				if( xv[m].first - xv[l + 1].first <= R * 2 ) r = l;

				if( prefv[m] - prefv[r] >= best )
				{
						best = prefv[m] - prefv[r];
						bestcur = make_pair(m, r + 1);
				}
			}

			ans += best;
			if( best )
				sel[bestcur.second] = bestcur.first;
		}
		cout << "Case " << i << ": " << ans << '\n';
	}

	return 0;
}