枚举+二分
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
inline int read()
{
int x = 0, f = 1, t = getchar();
while(t < 48 || t > 57) t == 45 ? f = -1 : 0, t = getchar();
while(t >= 48 && t <= 57) x = (x<<1) + (x<<3) + t - 48, t = getchar();
return x * f;
}
const int maxm = 305, maxn = 305, maxl = 5005;
int l, m, n, ans, ansd;
int p[maxm], d[maxn];
bool better(int pos)
{
int res = 0;
for(int i = 1; i <= m; ++i)
{
int pp = p[i] - pos;
int j = lower_bound(d + 1, d + n + 1, pp) - d;
if(j >= 2) res += min(abs(pp - d[j-1]), abs(pp - d[j]));
else res += abs(pp - d[j]);
}
ansd = max(ansd, res);
return ansd == res;
}
void write(int x, int ch = 10)
{
printf("%d", x >> 1);
if(x & 1) printf(".5");
putchar(ch);
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
l = read() << 1, m = read();
for(int i = 1; i <= m; ++i) p[i] = read() << 1;
n = read();
for(int i = 2; i <= n; ++i) d[i] = read() << 1;
for(int i = l - d[n]; i >= 0; --i)
if(better(i)) ans = i;
write(ans, ' '), write(ansd);
#ifndef ONLINE_JUDGE
fclose(stdin), fclose(stdout);
#endif
return 0;
}