#include <bits/stdc++.h>
using namespace std;
int const N = 400000;
long long x[N + 1];
void solve() {
  long long n, k;
  int m;
  scanf("%lld%d%lld", &n, &m, &k);
  x[0] = 0;
  for (int i = 1; i < (int)(m + 1); ++i) scanf("%lld", x + i);
  for (int i = 0; i < (int)(m + 1); ++i) x[i] = (i == m ? n : x[i + 1]) - x[i];
  ++m;
  k += m;
  auto sm1 = [&](long long n) {
    long long an = 0;
    for (int i = 0; i < (int)(m); ++i) an += x[i] / n;
    return an;
  };
  auto sm2 = [&](long long n) {
    long long an = 0;
    for (int i = 0; i < (int)(m); ++i) an += (x[i] + n - 1) / n;
    return an;
  };
  long long l = 1, r = *min_element(x, x + m);
  while (r > l) {
    long long m = l + r + 1 >> 1;
    if (sm1(m) < k)
      r = m - 1;
    else
      l = m;
  }
  long long L = l;
  l = 1, r = n;
  while (r > l) {
    long long m = l + r >> 1;
    if (sm2(m) > k)
      l = m + 1;
    else
      r = m;
  }
  long long R = l;
  multiset<long long> st;
  st.insert(L);
  st.insert(R);
  vector<pair<long long, long long> > v;
  for (int i = 0; i < (int)(m); ++i)
    if (x[i] / L < (x[i] + R - 1) / R) {
      long long a = (x[i] + R - 1) / R, b = x[i] / L;
      v.emplace_back(x[i] / a, (x[i] + b - 1) / b);
      st.insert(v.back().first);
    }
  long long an = *st.rbegin() - *st.begin();
  sort(v.begin(), v.end());
  for (auto &u : v) {
    st.erase(st.find(u.first));
    st.insert(u.second);
    an = min(an, *st.rbegin() - *st.begin());
  }
  printf("%lld\n", an);
}
int main() {
  int t;
  scanf("%d", &t);
  while (t--) solve();
}
