Problem: There is a string of length n+1 of characters 'A' and 'B'. The first character and last character of the string are equal to 'A'.

You are given m indices p_1, p_2, …, p_m (0-indexation) denoting the other indices of characters 'A' in the string.

Let's denote the minimum distance between two neighboring 'A' as l, and maximum distance between neighboring 'A' as r.

For example, (l,r) of string "ABBAABBBA" is (1,4).

And let's denote the balance degree of a string as the value of r-l.

Now Dreamoon wants to change exactly k characters from 'B' to 'A', and he wants to make the balance degree of the string as small as possible.

Please calculate the required minimum possible value of balance degree.

Input

The first line contains one integer t denoting the number of test cases (1 ≤ t ≤ 400 000).

For each test case, the first line contains three integers n, m and k (1 ≤ n ≤ 10^{15}, 0 ≤ m ≤ 400 000, 0 ≤ k < n - m).

The second line contains m integers p_1, p_2, …, p_m, (0 < p_1 < p_2 < … < p_m < n).

The total sum of m is at most 400 000.

Output

For each test case, print one integer: the smallest possible value of balance degree after k changes of 'B' to 'A'.

Example

Input


5
80 3 5
11 24 50
81 7 12
4 10 17 26 37 48 61
25 10 14
3 4 7 12 13 15 17 19 21 23
1 0 0

10 2 0
2 4


Output


5
2
0
0
4

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
template <class t, class u>
void chmax(t& first, u second) {
  if (first < second) first = second;
}
template <class t, class u>
void chmin(t& first, u second) {
  if (second < first) first = second;
}
template <class t>
using vc = vector<t>;
template <class t>
using vvc = vc<vc<t>>;
using pi = pair<ll, ll>;
using vi = vc<ll>;
template <class t, class u>
ostream& operator<<(ostream& os, const pair<t, u>& p) {
  return os << "{" << p.first << "," << p.second << "}";
}
template <class t>
ostream& operator<<(ostream& os, const vc<t>& v) {
  os << "{";
  for (auto e : v) os << e << ",";
  return os << "}";
}
using uint = unsigned;
using ull = unsigned long long;
template <class t, size_t n>
ostream& operator<<(ostream& os, const array<t, n>& first) {
  return os << vc<t>(first.begin(), first.end());
}
template <ll i, class T>
void print_tuple(ostream&, const T&) {}
template <ll i, class T, class H, class... Args>
void print_tuple(ostream& os, const T& t) {
  if (i) os << ",";
  os << get<i>(t);
  print_tuple<i + 1, T, Args...>(os, t);
}
template <class... Args>
ostream& operator<<(ostream& os, const tuple<Args...>& t) {
  os << "{";
  print_tuple<0, tuple<Args...>, Args...>(os, t);
  return os << "}";
}
template <class t>
void print(t x, ll suc = 1) {
  cout << x;
  if (suc == 1) cout << "\n";
  if (suc == 2) cout << " ";
}
ll read() {
  ll i;
  cin >> i;
  return i;
}
vi readvi(ll n, ll off = 0) {
  vi v(n);
  for (ll i = ll(0); i < ll(n); i++) v[i] = read() + off;
  return v;
}
template <class T>
void print(const vector<T>& v, ll suc = 1) {
  for (ll i = ll(0); i < ll(v.size()); i++)
    print(v[i], i == ll(v.size()) - 1 ? suc : 2);
}
string readString() {
  string s;
  cin >> s;
  return s;
}
template <class T>
T sq(const T& t) {
  return t * t;
}
void yes(bool ex = true) {
  cout << "Yes"
       << "\n";
  if (ex) exit(0);
}
void no(bool ex = true) {
  cout << "No"
       << "\n";
  if (ex) exit(0);
}
void possible(bool ex = true) {
  cout << "Possible"
       << "\n";
  if (ex) exit(0);
}
void impossible(bool ex = true) {
  cout << "Impossible"
       << "\n";
  if (ex) exit(0);
}
constexpr ll ten(ll n) { return n == 0 ? 1 : ten(n - 1) * 10; }
const ll infLL = LLONG_MAX / 3;
const ll inf = infLL;
ll topbit(signed t) { return t == 0 ? -1 : 31 - __builtin_clz(t); }
ll topbit(ll t) { return t == 0 ? -1 : 63 - __builtin_clzll(t); }
ll botbit(signed first) { return first == 0 ? 32 : __builtin_ctz(first); }
ll botbit(ll first) { return first == 0 ? 64 : __builtin_ctzll(first); }
ll popcount(signed t) { return __builtin_popcount(t); }
ll popcount(ll t) { return __builtin_popcountll(t); }
bool ispow2(ll i) { return i && (i & -i) == i; }
ll mask(ll i) { return (ll(1) << i) - 1; }
bool inc(ll first, ll second, ll c) { return first <= second && second <= c; }
template <class t>
void mkuni(vc<t>& v) {
  sort(v.begin(), v.end());
  v.erase(unique(v.begin(), v.end()), v.end());
}
ll rand_int(ll l, ll r) {
  static mt19937_64 gen(chrono::steady_clock::now().time_since_epoch().count());
  return uniform_int_distribution<ll>(l, r)(gen);
}
template <class t>
void myshuffle(vc<t>& first) {
  for (ll i = ll(0); i < ll(ll(first.size())); i++)
    swap(first[i], first[rand_int(0, i)]);
}
template <class t>
ll lwb(const vc<t>& v, const t& first) {
  return lower_bound(v.begin(), v.end(), first) - v.begin();
}
void sub(const vi& first, ll k) {
  void(0);
  ll n = ll(first.size());
  ll mx = *max_element(first.begin(), first.end());
  auto cost = [&](ll len, ll tar) { return (len + tar - 1) / tar - 1; };
  vi cnt(n);
  {
    ll lw = 0, up = mx;
    while (up - lw > 1) {
      const ll mid = (lw + up) / 2;
      ll sum = 0;
      for (ll i = ll(0); i < ll(n); i++) sum += cost(first[i], mid);
      if (sum <= k)
        up = mid;
      else
        lw = mid;
    }
    mx = up;
  }
  {
    assert(mx > 0);
    for (ll i = ll(0); i < ll(n); i++) cnt[i] = cost(first[i], mx);
    ll sum = accumulate(cnt.begin(), cnt.end(), ll(0));
    ll rem = k - sum;
    assert(rem >= 0);
    for (ll i = ll(0); i < ll(n); i++) {
      ll up = mx == 1 ? first[i] - 1 : cost(first[i], mx - 1);
      if (up > cnt[i]) {
        ll use = min(rem, up - cnt[i]);
        rem -= use;
        cnt[i] += use;
      }
    }
    for (ll i = ll(0); i < ll(n); i++) assert(cnt[i] < first[i]);
    assert(rem == 0);
  }
  ll ans = inf;
  {
    ll mn = inf;
    for (ll i = ll(0); i < ll(n); i++) chmin(mn, first[i] / (cnt[i] + 1));
    chmin(ans, mx - mn);
  }
  void(0);
  if (ans == 0) {
    print(ans);
    return;
  }
  if (mx > 1) {
    ll left = mx - 1;
    ll lw = -1, up = inf;
    while (up - lw > 1) {
      const ll mid = (lw + up) / 2;
      ll p = left + mid;
      ll x = 0, y = 0;
      bool ok = true;
      for (ll i = ll(0); i < ll(n); i++) {
        ll c = first[i] / mid - 1;
        x += c;
        ll d = (first[i] + p - 1) / p - 1;
        if (c < d) {
          ok = false;
          break;
        }
        y += d;
      }
      if (ok && inc(y, k, x))
        up = mid;
      else
        lw = mid;
    }
    chmin(ans, up);
  }
  void(0);
  using T = tuple<ll, ll, ll>;
  priority_queue<T> pq;
  auto add = [&](ll i, ll c) {
    if (first[i] <= c) return;
    pq.emplace(first[i] / (c + 1), i, c);
  };
  for (ll i = ll(0); i < ll(n); i++) add(i, cnt[i] + 1);
  vi lw(n, -inf);
  lw[0] = mx;
  for (ll waf = ll(1); waf < ll(n); waf++) {
    if (pq.empty()) break;
    ll x, i, c;
    tie(x, i, c) = pq.top();
    pq.pop();
    lw[waf] = x;
    add(i, c + 1);
  }
  void(0);
  {
    vi tmp(n);
    for (ll i = ll(0); i < ll(n); i++) {
      tmp[i] = first[i] / (cnt[i] + 1);
    }
    void(0);
  }
  void(0);
  vc<pi> li(n);
  for (ll i = ll(0); i < ll(n); i++) li[i] = pi(first[i] / (cnt[i] + 1), i);
  sort(li.begin(), li.end());
  ll left = mx - 1;
  for (ll i = ll(0); i < ll(n); i++) {
    chmin(ans, mx - min({li[i].first, lw[i], left}));
    ll j = li[i].second;
    if (cnt[j]) {
      chmax(mx, (first[j] + cnt[j] - 1) / cnt[j]);
    } else {
      break;
    }
  }
  print(ans);
}
void slv() {
  ll n, m, k;
  cin >> n >> m >> k;
  vi len(m + 1);
  ll pre = 0;
  for (ll i = ll(0); i < ll(m); i++) {
    ll first = read();
    len[i] = first - pre;
    pre = first;
  }
  len[m] = n - pre;
  sub(len, k);
}
signed main() {
  cin.tie(0);
  ios::sync_with_stdio(0);
  cout << fixed << setprecision(20);
  ll t;
  cin >> t;
  for (ll _ = ll(0); _ < ll(t); _++) slv();
}