#include <bits/stdc++.h>
using namespace std;
inline char gc() {
  static char buf[100000], *p1 = buf, *p2 = buf;
  return p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 100000, stdin), p1 == p2)
             ? EOF
             : *p1++;
}
inline long long read() {
  long long x = 0;
  char ch = getchar();
  bool positive = 1;
  for (; !isdigit(ch); ch = getchar())
    if (ch == '-') positive = 0;
  for (; isdigit(ch); ch = getchar()) x = x * 10 + ch - '0';
  return positive ? x : -x;
}
inline void write(long long a) {
  if (a < 0) {
    a = -a;
    putchar('-');
  }
  if (a >= 10) write(a / 10);
  putchar('0' + a % 10);
}
inline void writeln(long long a) {
  write(a);
  puts("");
}
inline void wri(long long a) {
  write(a);
  putchar(' ');
}
inline unsigned long long rnd() {
  return ((unsigned long long)rand() << 30 ^ rand()) << 4 | rand() % 4;
}
const int N = 400005;
long long n, k, p[N], a[N];
pair<long long, long long> q[N];
int m;
long long checks(long long x) {
  long long sum = 0;
  for (int i = (int)(0); i <= (int)(m); i++) sum += (a[i] + x - 1) / x;
  return sum <= k;
}
long long checkx(long long x) {
  long long sum = 0;
  for (int i = (int)(0); i <= (int)(m); i++) sum += a[i] / x;
  return sum >= k;
}
int main() {
  int T = read();
  while (T--) {
    n = read();
    m = read();
    k = read() + m + 1;
    for (int i = (int)(1); i <= (int)(m); i++) p[i] = read();
    for (int i = (int)(0); i <= (int)(m); i++) a[i] = p[i + 1] - p[i];
    a[m] = n - p[m];
    long long l = 1, r = 1e15;
    while (l < r) {
      long long mid = (l + r) >> 1;
      if (checks(mid))
        r = mid;
      else
        l = mid + 1;
    }
    long long U = l;
    l = 1;
    r = 1e15;
    while (l < r) {
      long long mid = (l + r) >> 1;
      mid++;
      if (checkx(mid))
        l = mid;
      else
        r = mid - 1;
    }
    long long D = l;
    int tot = 0;
    for (int i = (int)(0); i <= (int)(m); i++) {
      long long d = a[i] / D;
      if (d == 0)
        q[++tot] = make_pair(a[i], 1e18);
      else if ((a[i] + d - 1) / d > U) {
        q[++tot] = make_pair(a[i] / (d + 1), (a[i] + d - 1) / d);
      }
    }
    q[++tot] = make_pair(D, 1e18);
    sort(q + 1, q + tot + 1);
    long long dq = U, ans = 1e18;
    for (int i = (int)(1); i <= (int)(tot); i++) {
      ans = min(ans, dq - q[i].first);
      dq = max(dq, q[i].second);
    }
    cout << ans << endl;
  }
}

### Prompt

Your task is to create a cpp solution to the following 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

### Response

```cpp
#include <bits/stdc++.h>
using namespace std;
inline char gc() {
  static char buf[100000], *p1 = buf, *p2 = buf;
  return p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 100000, stdin), p1 == p2)
             ? EOF
             : *p1++;
}
inline long long read() {
  long long x = 0;
  char ch = getchar();
  bool positive = 1;
  for (; !isdigit(ch); ch = getchar())
    if (ch == '-') positive = 0;
  for (; isdigit(ch); ch = getchar()) x = x * 10 + ch - '0';
  return positive ? x : -x;
}
inline void write(long long a) {
  if (a < 0) {
    a = -a;
    putchar('-');
  }
  if (a >= 10) write(a / 10);
  putchar('0' + a % 10);
}
inline void writeln(long long a) {
  write(a);
  puts("");
}
inline void wri(long long a) {
  write(a);
  putchar(' ');
}
inline unsigned long long rnd() {
  return ((unsigned long long)rand() << 30 ^ rand()) << 4 | rand() % 4;
}
const int N = 400005;
long long n, k, p[N], a[N];
pair<long long, long long> q[N];
int m;
long long checks(long long x) {
  long long sum = 0;
  for (int i = (int)(0); i <= (int)(m); i++) sum += (a[i] + x - 1) / x;
  return sum <= k;
}
long long checkx(long long x) {
  long long sum = 0;
  for (int i = (int)(0); i <= (int)(m); i++) sum += a[i] / x;
  return sum >= k;
}
int main() {
  int T = read();
  while (T--) {
    n = read();
    m = read();
    k = read() + m + 1;
    for (int i = (int)(1); i <= (int)(m); i++) p[i] = read();
    for (int i = (int)(0); i <= (int)(m); i++) a[i] = p[i + 1] - p[i];
    a[m] = n - p[m];
    long long l = 1, r = 1e15;
    while (l < r) {
      long long mid = (l + r) >> 1;
      if (checks(mid))
        r = mid;
      else
        l = mid + 1;
    }
    long long U = l;
    l = 1;
    r = 1e15;
    while (l < r) {
      long long mid = (l + r) >> 1;
      mid++;
      if (checkx(mid))
        l = mid;
      else
        r = mid - 1;
    }
    long long D = l;
    int tot = 0;
    for (int i = (int)(0); i <= (int)(m); i++) {
      long long d = a[i] / D;
      if (d == 0)
        q[++tot] = make_pair(a[i], 1e18);
      else if ((a[i] + d - 1) / d > U) {
        q[++tot] = make_pair(a[i] / (d + 1), (a[i] + d - 1) / d);
      }
    }
    q[++tot] = make_pair(D, 1e18);
    sort(q + 1, q + tot + 1);
    long long dq = U, ans = 1e18;
    for (int i = (int)(1); i <= (int)(tot); i++) {
      ans = min(ans, dq - q[i].first);
      dq = max(dq, q[i].second);
    }
    cout << ans << endl;
  }
}

```