#include <bits/stdc++.h>
using namespace std;
const int N = 10005, INF = 1000000005;
int f[N], n, m, z, x, y, K, len[205], mzt, zt, g[1048577], p[25], pn;
int h, t, dis[25][25], que[N];
bool c[N];
inline void spfa(int l, int x) {
  memset(f, 127 / 3, sizeof(f));
  h = 0;
  que[t = 1] = x;
  c[x] = true;
  f[x] = 0;
  int now;
  while (h < t) {
    now = que[++h];
    for (int j = 1; j <= m; ++j)
      for (int k = -1; k <= 1; k += 2)
        if (now + len[j] * k >= 1 && now + len[j] * k <= n &&
            f[now + len[j] * k] > f[now] + 1) {
          f[now + len[j] * k] = f[now] + 1;
          if (c[now + len[j] * k] == false) {
            que[++t] = now + len[j] * k;
            c[now + len[j] * k] = true;
          }
        }
    c[now] = false;
  }
  for (int i = 1; i <= pn; ++i) dis[l][i] = f[p[i]];
}
int main() {
  scanf("%d%d%d", &n, &K, &m);
  ++n;
  for (int i = 1; i <= K; ++i) {
    scanf("%d", &x);
    c[x] ^= 1;
    c[x + 1] ^= 1;
  }
  for (int i = 1; i <= n; ++i)
    if (c[i] == true) p[++pn] = i;
  for (int i = 1; i <= m; ++i) scanf("%d", &len[i]);
  for (int i = 1; i < pn; ++i)
    for (int j = i + 1; j <= pn; ++j) spfa(i, p[i]);
  memset(g, 127 / 3, sizeof(g));
  g[0] = 0;
  mzt = (1 << pn) - 1;
  for (int i = 0; i <= mzt; ++i)
    if (g[i] <= 10000005) {
      for (int j = 1; j < pn; ++j)
        for (int k = j + 1; k <= pn; ++k)
          if ((i & (1 << (j - 1))) == 0 && (i & (1 << (k - 1))) == 0)
            g[i | (1 << (j - 1)) | (1 << (k - 1))] =
                min(g[i | (1 << (j - 1)) | (1 << (k - 1))], g[i] + dis[j][k]);
    }
  if (g[mzt] <= 10000005)
    printf("%d", g[mzt]);
  else
    printf("-1");
  fclose(stdin);
  fclose(stdout);
}
