#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void read(T &x) {
  x = 0;
  char c = getchar();
  int f = 1;
  while (!isdigit(c)) {
    if (c == '-') f = -1;
    c = getchar();
  }
  while (isdigit(c)) {
    x = x * 10 + c - '0';
    c = getchar();
  }
  x *= f;
}
template <class T>
T gcd(T a, T b) {
  return !b ? a : gcd(b, a % b);
}
template <class T>
inline void umin(T &x, T y) {
  x = x < y ? x : y;
}
template <class T>
inline void umax(T &x, T y) {
  x = x > y ? x : y;
}
mt19937 R(chrono::system_clock().now().time_since_epoch().count());
const int N = 466666;
long long n, m, k, a[N];
bool ck(long long l, long long r) {
  long long mn = 0, mx = 0;
  for (register int i = (1); i <= (m); i++) {
    long long x = (a[i] + r - 1) / r, y = a[i] / l;
    if (x > y) return 0;
    mn += x;
    mx += y;
  }
  return mn <= k && k <= mx;
}
int main() {
  int T;
  read(T);
  while (T--) {
    read(n);
    read(m);
    read(k);
    for (register int i = (1); i <= (m); i++) read(a[i]);
    a[m + 1] = n;
    for (register int i = (m + 1); i >= (1); i--) a[i] -= a[i - 1];
    m++;
    k += m;
    sort(a + 1, a + m + 1);
    long long res = 1e18;
    long long lo = 1, hi = 1e15;
    while (lo < hi) {
      long long mid = (lo + hi) / 2;
      if (ck(1, mid))
        hi = mid;
      else
        lo = mid + 1;
    }
    long long r = lo;
    lo = 1, hi = 1e15;
    while (lo < hi) {
      long long mid = (lo + hi + 1) / 2;
      if (ck(mid, 1e15))
        lo = mid;
      else
        hi = mid - 1;
    }
    long long l = lo;
    assert(l <= r);
    static pair<long long, long long> s[N];
    int len = 0;
    for (register int i = (1); i <= (m); i++) {
      long long x = (a[i] + r - 1) / r, y = a[i] / l;
      if (x > y) {
        x = (a[i] + l - 1) / l;
        y = a[i] / r;
        s[++len] =
            make_pair(x >= 1 && x <= a[i] ? l - a[i] / x : 1e18,
                      y >= 1 && y <= a[i] ? (a[i] + y - 1) / y - r : 1e18);
      }
    }
    if (!len)
      res = r - l;
    else {
      sort(s + 1, s + len + 1);
      res = 1e18;
      for (register int i = (1); i <= (len); i++)
        assert(s[i].first > 0 && s[i].second > 0);
      for (long long i = len, j = 0; i >= 0; i--) {
        umin(res, j + s[i].first + r - l);
        umax(j, s[i].second);
      }
    }
    printf("%lld\n", res);
  }
  return 0;
}
