#include <bits/stdc++.h>
using namespace std;
long long read() {
  long long x = 0, f = 0;
  char ch = getchar();
  while (!isdigit(ch)) f = ch == '-', ch = getchar();
  while (isdigit(ch)) x = (x << 1) + (x << 3) + (ch ^ 48), ch = getchar();
  return f ? -x : x;
}
const int N = 400010;
long long n, m, k;
long long a[N];
void IN() {
  n = read(), m = read(), k = read();
  long long las = 0;
  for (int i = (1); i <= (m); i++) {
    long long now = read();
    a[i] = now - las;
    las = now;
  }
  ++m;
  a[m] = n - las;
  k += m;
}
long long D, U;
int checkD(long long lim) {
  long long s = 0;
  for (int i = (1); i <= (m); i++) {
    if (a[i] < lim) return 0;
    s += a[i] / lim;
  }
  return s >= k;
}
void getD() {
  long long L = D = 1, R = n;
  while (L <= R) {
    long long mid = (L + R) >> 1;
    if (checkD(mid))
      L = mid + 1, D = mid;
    else
      R = mid - 1;
  }
}
int checkU(long long lim) {
  long long s = 0;
  for (int i = (1); i <= (m); i++) s += (a[i] + lim - 1) / lim;
  return s <= k;
}
void getU() {
  long long L = 1, R = U = n;
  while (L <= R) {
    long long mid = (L + R) >> 1;
    if (checkU(mid))
      R = mid - 1, U = mid;
    else
      L = mid + 1;
  }
}
vector<pair<long long, long long> > v;
int check1() {
  v.clear();
  for (int i = (1); i <= (m); i++) {
    long long x = a[i] / D, y = (a[i] + U - 1) / U;
    if (y > x) v.push_back(make_pair(a[i] / y, (a[i] + x - 1) / x));
  }
  return v.empty();
}
void solve() {
  IN();
  getD(), getU();
  if (check1()) return (void)printf("%lld\n", U - D);
  sort(v.begin(), v.end());
  long long mx = U;
  long long ans = mx - v[0].first;
  v.push_back(make_pair(D, U));
  for (int i = (0); i <= ((int)v.size() - 2); i++) {
    mx = max(mx, v[i].second);
    ans = min(ans, mx - v[i + 1].first);
  }
  printf("%lld\n", ans);
}
int main() {
  int T = read();
  for (int _ = (1); _ <= (T); _++) solve();
  return 0;
}
