#include <bits/stdc++.h>
using namespace std;
const long long N = 4e5 + 15;
const long long inf = 1LL << 60;
long long read() {
  long long s = 0;
  char c = getchar(), lc = '+';
  while (c < '0' || '9' < c) lc = c, c = getchar();
  while ('0' <= c && c <= '9') s = s * 10 + c - '0', c = getchar();
  return lc == '-' ? -s : s;
}
void write(long long x) {
  if (x < 0) {
    putchar('-');
    x = -x;
  }
  if (x < 10)
    putchar(x + '0');
  else {
    write(x / 10);
    putchar(x % 10 + '0');
  }
}
void print(long long x = -1, char c = '\n') {
  write(x);
  putchar(c);
}
long long Div(long long x, long long y) { return (x + y - 1) / y; }
long long m, n, k, a[N], L, R;
long long check1(long long mid) {
  long long ret = 0;
  for (long long i = 1; i <= n; i++) ret += Div(a[i], mid) - 1;
  return ret;
}
long long check2(long long mid) {
  long long ret = 0;
  for (long long i = 1; i <= n; i++) ret += a[i] / mid - 1;
  return ret;
}
void YSGS() {
  long long l = 1, r = m;
  while (l <= r) {
    long long mid = (l + r) / 2;
    if (check1(mid) <= k)
      r = mid - 1;
    else
      l = mid + 1;
  }
  R = l;
  l = 1, r = m;
  while (l <= r) {
    long long mid = (l + r) / 2;
    if (check2(mid) >= k)
      l = mid + 1;
    else
      r = mid - 1;
  }
  L = r;
}
struct node {
  long long L, R;
  bool operator<(const node &a) const {
    return L < a.L || (L == a.L && R < a.R);
  }
} b[N];
signed main(signed Recall, char *_902_[]) {
  (void)Recall, (void)_902_;
  long long T = read();
  while (T--) {
    m = read(), n = read(), k = read();
    for (long long i = 1; i <= n; i++) a[i] = read();
    a[++n] = m;
    for (long long i = n; i >= 1; i--) a[i] = a[i] - a[i - 1];
    YSGS();
    if (R <= L)
      puts("0");
    else {
      long long cnt = 0;
      b[++cnt] = (node){-inf, R};
      b[++cnt] = (node){L, inf};
      for (long long i = 1; i <= n; i++)
        if (a[i] / L - Div(a[i], R) < 0) {
          b[++cnt] =
              (node){a[i] / Div(a[i], R), a[i] / L ? Div(a[i], a[i] / L) : inf};
        }
      sort(b + 1, b + 1 + cnt);
      long long ans = inf;
      for (long long i = 2; i <= cnt; i++) b[i].R = max(b[i].R, b[i - 1].R);
      for (long long i = 1; i < cnt; i++) ans = min(ans, b[i].R - b[i + 1].L);
      print(ans);
    }
  }
  return 0;
}
