include <bits/stdc++.h>
define s second
define f first
define int long long
define lb lower_bound
define pb push_back
define IOS ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
using namespace std; const int mod1 = 1e9 + 7; const int mod2 = 1e9 + 9; const int maxn = 2 * 1e5 + 5; const int inf = 1e18 + 7;
void solve_problem() { // <------------- WW :D
int n, m, l;
cin >> n >> m >> l;
int copn = n;
int a[n + 1] = {};
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
int maxsum = 0;
int minsum = 0;
int maxcnt = 0;
int mincnt = m;
if (m > copn) {
m = copn + 1;
}
if (m > copn) {
for (int i = 1; i <= n; i++) {
int ras = a[i] - a[i - 1];
if (ras % m == 0) {
minsum += ras / m;
maxsum += ras / m;
if (maxsum == minsum) {
mincnt--;
m--;
} else {
if (maxcnt == 1) {
maxsum = minsum;
maxcnt--;
m--;
} else {
maxcnt--;
m--;
}
}
} else {
if (minsum == maxsum) {
minsum += ras / m;
maxsum += ras / m + 1;
} else {
minsum += ras / m;
maxsum += ras / m;
}
if (mincnt <= ras % m) {
int ostatok = ras % m - mincnt;
minsum++;
mincnt = m;
maxcnt = 0;
if (ostatok > 0) {
maxsum++;
maxcnt += ostatok;
mincnt -= ostatok;
}
} else {
mincnt -= ras % m;
maxcnt += ras % m;
}
if (maxcnt == 1) {
maxsum = minsum;
maxcnt--;
m--;
} else {
if (maxcnt == 0) {
mincnt--;
m--;
} else {
maxcnt--;
m--;
}
}
}
}
cout << minsum + l - a[n] << "\n";
return;
} else {
int i = 1;
int save = 0;
int minok = false;
int maxok = false;
queue<int> q;
int count_nummax = 0;
int count_nummin = 0;
while (i <= n && copn >= m) {
int ras = a[i] - a[i - 1];
if (ras < save) {
q.push(ras);
while (!q.empty()) {
save = q.front();
q.pop();
i++;
while (ras + a[i] - a[i - 1] < save) {
ras += a[i] - a[i - 1];
i++;
copn--;
if (maxcnt == 1) {
maxcnt--;
maxsum = minsum;
count_nummax++;
} else {
if (maxcnt == 0) {
mincnt--;
count_nummin++;
} else {
maxcnt--;
count_nummax++;
}
}
q.push(maxsum);
}
ras = (a[i] - a[i - 1]) - (save - ras);
if (maxcnt == 1) {
maxcnt--;
maxsum = minsum;
} else {
if (maxcnt == 0) {
mincnt--;
count_nummin++;
} else {
maxcnt--;
count_nummax++;
}
}
mincnt += count_nummin;
if (maxcnt == 0 && maxcnt + count_nummax == 1) {
maxsum++;
}
maxcnt += count_nummax;
q.push(maxsum);
}
} else {
ras -= save;
if (minok) {
mincnt++;
minok = false;
}
if (maxok) {
maxok = false;
maxcnt++;
if (maxcnt == 1) {
maxsum++;
}
}
}
if (ras % m == 0) {
minsum += ras / m;
maxsum += ras / m;
copn--;
save = maxsum;
if (maxsum == minsum) {
mincnt--;
minok = true;
} else {
if (maxcnt == 1) {
maxcnt--;
maxsum = minsum;
maxok = true;
} else {
if (maxcnt == 0) {
minok = true;
mincnt--;
} else {
maxcnt--;
maxok = true;
}
}
}
} else {
if (minsum == maxsum) {
minsum += ras / m;
maxsum += ras / m + 1;
} else {
minsum += ras / m;
maxsum += ras / m;
}
if (mincnt <= ras % m) {
int ostatok = ras % m - mincnt;
minsum++;
mincnt = m;
maxcnt = 0;
if (ostatok > 0) {
maxsum++;
maxcnt += ostatok;
mincnt -= ostatok;
}
} else {
mincnt -= ras % m;
maxcnt += ras % m;
}
copn--;
if (maxcnt == 1) {
maxsum = minsum;
maxcnt--;
maxok = true;
} else {
if (maxcnt == 0) {
mincnt--;
minok = true;
} else {
maxcnt--;
maxok = true;
}
}
}
}
}}
signed main () { //до апреля 1200 плиз IOS
int tt = 1;
cin >> tt;
while (tt--) {
solve_problem();
}}




