#include <bits/stdc++.h>
using namespace std;
std::mt19937 rnd(
    (int)std::chrono::steady_clock::now().time_since_epoch().count());
long long gcd(long long a, long long b) { return b == 0 ? a : gcd(b, a % b); }
const int MAXA = 400000;
const int MAXV = MAXA + 1;
long long len;
int na;
long long ncut;
long long a[MAXA];
long long v[MAXV];
int nv;
long long calcmnatmost(long long lim) {
  long long ret = 0;
  for (int i = (0); i < (nv); ++i) {
    long long npart = (v[i] + lim - 1) / lim;
    ret += npart - 1;
  }
  return ret;
}
long long calcmxatleast(long long lim) {
  long long ret = 0;
  for (int i = (0); i < (nv); ++i) {
    long long npart = v[i] / lim;
    ret += npart - 1;
  }
  return ret;
}
pair<long long, long long> extra[MAXV];
int nextra;
long long after[MAXV];
long long solve() {
  nv = 0;
  if (na == 0) {
    v[nv++] = len;
  } else {
    v[nv++] = a[0];
    for (int i = (0); i < (na - 1); ++i) v[nv++] = a[i + 1] - a[i];
    v[nv++] = len - a[na - 1];
  }
  long long L, R;
  {
    long long lo = 0, hi = len;
    while (lo + 1 < hi) {
      long long mi = lo + (hi - lo) / 2;
      if (calcmnatmost(mi) > ncut)
        lo = mi;
      else
        hi = mi;
    }
    R = hi;
  }
  {
    long long lo = 0, hi = len + 1;
    for (int i = (0); i < (nv); ++i) hi = min(hi, v[i] + 1);
    while (lo + 1 < hi) {
      long long mi = lo + (hi - lo) / 2;
      if (calcmxatleast(mi) < ncut)
        hi = mi;
      else
        lo = mi;
    }
    L = lo;
  }
  nextra = 0;
  for (int i = (0); i < (nv); ++i) {
    long long xpart = v[i] / L;
    long long vx = (v[i] + xpart - 1) / xpart;
    long long ypart = (v[i] + R - 1) / R;
    long long vy = v[i] / ypart;
    assert(vx >= L && vy <= R);
    extra[nextra++] = make_pair(max(0LL, vx - R), max(0LL, L - vy));
  }
  sort(extra, extra + nextra);
  if (nextra >= 1) after[nextra - 1] = 0;
  for (int i = nextra - 2; i >= 0; --i)
    after[i] = max(after[i + 1], extra[i + 1].second);
  long long best = nextra == 0 ? 0 : max(after[0], extra[0].second);
  for (int i = (0); i < (nextra); ++i) {
    long long cur = extra[i].first + after[i];
    best = min(best, cur);
  }
  long long ret = R - L + best;
  return ret;
}
void run() {
  scanf("%lld%d%lld", &len, &na, &ncut);
  for (int i = (0); i < (na); ++i) scanf("%lld", &a[i]);
  printf("%lld\n", solve());
}
int main() {
  int ncase;
  scanf("%d", &ncase);
  for (int i = (1); i <= (ncase); ++i) run();
  return 0;
}
