#include <bits/stdc++.h>
using namespace std;
const int maxn = 400010;
long long a[maxn], S, k, u[maxn], v[maxn];
int n, cnt;
priority_queue<pair<long long, int> > q;
bool valid1(long long x) {
  long long t = 0;
  for (int i(0), i_END(n); i <= i_END; i++)
    t += max((a[i] + x - 1) / x - 1, 0ll);
  return t <= k;
}
bool valid2(long long x) {
  long long t = 0;
  for (int i(0), i_END(n); i <= i_END; i++) {
    if (a[i] < x) return false;
    t += a[i] / x - 1;
  }
  return t >= k;
}
int main() {
  int T;
  scanf("%d", &T);
  while (T--) {
    scanf("%lld%d%lld", &S, &n, &k);
    for (int i(1), i_END(n); i <= i_END; i++) scanf("%lld", &a[i]);
    a[n + 1] = S;
    a[0] = 0;
    for (int i(0), i_END(n); i <= i_END; i++) a[i] = a[i + 1] - a[i];
    long long l = 1, r = S, L, R;
    while (l < r) {
      long long mid = (l + r) >> 1;
      if (valid1(mid))
        r = mid;
      else
        l = mid + 1;
    }
    R = l;
    l = 1, r = S;
    while (l < r) {
      long long mid = (l + r + 1) >> 1;
      if (valid2(mid))
        l = mid;
      else
        r = mid - 1;
    }
    L = l;
    assert(L <= R);
    cnt = 0;
    for (int i(0), i_END(n); i <= i_END; i++) {
      long long tmp = a[i] / L;
      assert(tmp);
      if ((a[i] + tmp - 1) / tmp > R) {
        ++cnt;
        v[cnt] = (a[i] + tmp - 1) / tmp;
        u[cnt] = a[i] / (tmp + 1);
      }
    }
    if (!cnt) {
      printf("%lld\n", R - L);
      continue;
    }
    for (int i(1), i_END(cnt); i <= i_END; i++) q.push(make_pair(v[i], i));
    long long ans = q.top().first - L;
    while (q.size()) {
      int x = q.top().second;
      q.pop();
      L = min(L, u[x]);
      if (q.size())
        ans = min(ans, q.top().first - L);
      else
        ans = min(ans, R - L);
    }
    printf("%lld\n", ans);
    while (q.size()) q.pop();
  }
  return 0;
}
