#include using namespace std; typedef pair pii; typedef long long ll; typedef unsigned long long ull; const int N = 2000086, MOD = 1e9 + 7, INF = 0x3f3f3f3f; ll res; int n, m, cnt, w[N]; int k; bool check(int mid) { priority_queue, greater > q, q2; for (int i = 1; i < n + 1; i++) if (w[i] <= mid) q.push(w[i]); else if (m - w[i] <= mid) q.push(w[i] - m); else q2.push(w[i]); if (q.size() < k) return 0; while (q.size()) { auto u = q.top(); q.pop(); q2.push(u + m); int ne = u + mid + 1; if (ne >= m) break; while (q.size() && q.top() == u) { q.pop(); q2.push(u + m); } while (q2.size() && q2.top() - (ne - 1) <= mid) { if (ne - q2.top() <= mid) { q.push(q2.top()); q2.pop(); } else { q2.push(q2.top() + m); q2.pop(); } } if (q.size() < k) return 0; } return 1; } void solve() { int l = 0, r = m; while (l < r) { int mid = l + r >> 1; if (check(mid)) r = mid; else l = mid + 1; } printf("%d\n", l); } int main() { int T; cin >> T; while (T--) { cin >> n >> m >> k; for (int i = 1; i < n + 1; i++) scanf("%d", w + i); solve(); } return 0; }