#include <bits/stdc++.h>
using namespace std;
int T, m;
long long a[400005];
long long n, k;
struct my {
  long long l, r;
} x[400005];
int tot;
int cmp(my x, my y) { return x.l > y.l; }
int main() {
  scanf("%d", &T);
  while (T--) {
    tot = 0;
    scanf("%lld%d%lld", &n, &m, &k);
    for (int i = 1; i <= m; i++) scanf("%lld", &a[i]);
    a[m + 1] = n;
    for (int i = m + 1; i >= 1; i--) a[i] -= a[i - 1];
    long long L, R;
    long long l, r;
    l = 1, r = n;
    while (l < r) {
      long long mid = l + r + 1 >> 1;
      long long ans = 0;
      for (int i = 1; i <= m + 1; i++) ans += a[i] / mid;
      if (ans >= m + k + 1)
        l = mid;
      else
        r = mid - 1;
    }
    L = l;
    for (int i = 1; i <= m + 1; i++) L = min(L, a[i] * 1ll);
    l = 1, r = n;
    while (l < r) {
      long long mid = l + r >> 1;
      long long ans = 0;
      for (int i = 1; i <= m + 1; i++) ans += (a[i] + mid - 1) / mid;
      if (ans <= m + k + 1)
        r = mid;
      else
        l = mid + 1;
    }
    R = l;
    if (L >= R) {
      printf("0\n");
      continue;
    }
    for (int i = 1; i <= m + 1; i++) {
      if ((a[i] + R - 1) / R > a[i] / L) {
        tot++;
        x[tot].l = a[i] / ((a[i] + R - 1) / R);
        x[tot].r = (a[i] - 1) / (a[i] / L) + 1;
      }
    }
    long long maxR = R, ans = 0x3f3f3f3f3f3f3f3f;
    sort(x + 1, x + tot + 1, cmp);
    for (int i = tot; i >= 1; i--) {
      ans = min(ans, maxR - x[i].l);
      maxR = max(maxR, x[i].r);
    }
    ans = min(ans, maxR - L);
    printf("%lld\n", ans);
  }
}
