#include <bits/stdc++.h>
using namespace std;
const int MOD = 998244353;
vector<long long> D;
vector<long long> cnt;
long long n, m, k;
long long ans;
long long getL() {
  long long s = 1;
  long long e = *min_element(D.begin(), D.end());
  while (s < e) {
    long long mm = (s + e + 1) / 2;
    long long sum = 0;
    for (int i = 0; i <= m; i++) {
      sum += D[i] / mm - 1;
    }
    if (sum < k) {
      e = mm - 1;
    } else {
      s = mm;
    }
  }
  return s;
}
long long getU() {
  long long s = 1;
  long long e = *max_element(D.begin(), D.end());
  while (s < e) {
    long long mm = (s + e) / 2;
    long long sum = 0;
    for (int i = 0; i <= m; i++) {
      sum += (D[i] - 1) / mm;
    }
    if (sum > k) {
      s = mm + 1;
    } else {
      e = mm;
    }
  }
  return s;
}
void solve() {
  cin >> n >> m >> k;
  vector<long long> P(m);
  for (int i = 0; i < m; i++) cin >> P[i];
  D.clear();
  if (m == 0) {
    D.push_back(n);
  } else {
    D.push_back(P[0]);
    for (int i = 1; i < m; i++) D.push_back(P[i] - P[i - 1]);
    D.push_back(n - P[m - 1]);
  }
  cnt.assign(m + 1, 1);
  long long L = getL();
  long long U = getU();
  priority_queue<pair<long long, long long>> pp;
  for (int i = 0; i <= m; i++) {
    long long t1 = D[i] / L;
    long long t2 = (D[i] - 1) / U + 1;
    if (t2 <= t1) continue;
    long long nu = (D[i] - 1) / t1 + 1;
    long long nl = D[i] / t2;
    pp.push({nu, nl});
  }
  long long l = L;
  ans = LLONG_MAX;
  while (!pp.empty()) {
    auto p = pp.top();
    pp.pop();
    ans = min(ans, p.first - l);
    l = min(l, p.second);
  }
  ans = min(ans, U - l);
  cout << ans << endl;
}
int main() {
  std::ios::sync_with_stdio(false);
  cin.tie(NULL);
  cout.precision(10);
  int T = 1;
  cin >> T;
  for (int i = 1; i <= T; i++) {
    solve();
  }
  cout.flush();
  return 0;
}
