#include<bits/stdc++.h>
using namespace std;
int main()
{
short T;
cin >> T;
for ( short i = 1 ; i < T+1 ; i++)
{
int N, K; cin >> N >> K;
pair <int, int> intervals[N];
for (int j = 0 ; j < N ; j++){
cin >> intervals[j].first >> intervals[j].second;
}
sort(intervals, intervals + N);
int current_step = intervals[0].first + K, steps = 1;
for (int j = 0 ; j < N; j++)
{
if ( intervals[j].second <= current_step){
continue;
}
if ( intervals[i].first < current_step)
{
int steps_passed = (intervals[j].second - current_step)/ K;
steps += steps_passed;
current_step += (steps_passed * K);
if (current_step < intervals[j].second){
current_step += K, steps++;
}
} else
{
int steps_passed = (intervals[j].second - current_step)/ K;
steps += steps_passed;
current_step = intervals[j].first + (steps_passed * K) ;
if (current_step < intervals[j].second){
current_step += K, steps++;
}
}
}
cout << "Case #" << i << ": " << steps << '\n' ;
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKaW50IG1haW4oKQp7CiAgICBzaG9ydCBUOwogICAgY2luID4+IFQ7CiAgICBmb3IgKCBzaG9ydCBpID0gMSA7IGkgPCBUKzEgOyBpKyspCiAgICB7CiAgICAgICAgaW50IE4sIEs7IGNpbiA+PiBOID4+IEs7IAogICAgICAgIHBhaXIgPGludCwgaW50PiBpbnRlcnZhbHNbTl07CiAgICAgICAgZm9yIChpbnQgaiA9IDAgOyBqIDwgTiA7IGorKyl7CiAgICAgICAgICAgIGNpbiA+PiBpbnRlcnZhbHNbal0uZmlyc3QgPj4gaW50ZXJ2YWxzW2pdLnNlY29uZDsKICAgICAgICB9CiAgICAgICAgc29ydChpbnRlcnZhbHMsIGludGVydmFscyArIE4pOwogICAgICAgIGludCBjdXJyZW50X3N0ZXAgPSBpbnRlcnZhbHNbMF0uZmlyc3QgKyBLLCBzdGVwcyA9IDE7CiAgICAgICAgZm9yIChpbnQgaiA9IDAgOyBqIDwgTjsgaisrKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKCBpbnRlcnZhbHNbal0uc2Vjb25kIDw9IGN1cnJlbnRfc3RlcCl7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoIGludGVydmFsc1tpXS5maXJzdCA8IGN1cnJlbnRfc3RlcCkKICAgICAgICAgICAgCXsKICAgICAgICAgICAgICAgIGludCBzdGVwc19wYXNzZWQgPSAoaW50ZXJ2YWxzW2pdLnNlY29uZCAtIGN1cnJlbnRfc3RlcCkvIEs7CiAgICAgICAgICAgICAgICBzdGVwcyArPSBzdGVwc19wYXNzZWQ7CiAgICAgICAgICAgICAgICBjdXJyZW50X3N0ZXAgKz0gKHN0ZXBzX3Bhc3NlZCAqIEspOwogICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRfc3RlcCA8IGludGVydmFsc1tqXS5zZWNvbmQpewogICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfc3RlcCArPSBLLCBzdGVwcysrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaW50IHN0ZXBzX3Bhc3NlZCA9IChpbnRlcnZhbHNbal0uc2Vjb25kIC0gY3VycmVudF9zdGVwKS8gSzsKICAgICAgICAgICAgICAgIHN0ZXBzICs9IHN0ZXBzX3Bhc3NlZDsKICAgICAgICAgICAgICAgIGN1cnJlbnRfc3RlcCA9IGludGVydmFsc1tqXS5maXJzdCArIChzdGVwc19wYXNzZWQgKiBLKSA7CiAgICAgICAgICAgICAgICBpZiAoY3VycmVudF9zdGVwIDwgaW50ZXJ2YWxzW2pdLnNlY29uZCl7CiAgICAgICAgICAgICAgICAgICAgY3VycmVudF9zdGVwICs9IEssIHN0ZXBzKys7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY291dCA8PCAiQ2FzZSAjIiA8PCBpIDw8ICI6ICIgPDwgc3RlcHMgPDwgJ1xuJyA7CiAgICB9Cn0KCg==