#include <bits/stdc++.h>
using namespace std;
int read() {
  int s = 0, w = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') w = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9')
    s = (s << 3) + (s << 1) + (ch ^ 48), ch = getchar();
  return s * w;
}
priority_queue<pair<int, int>, vector<pair<int, int> >,
               greater<pair<int, int> > >
    q;
int n, k, l, wa[10010], v[10010], d[10010], p[30], D[30][30], f[1100000], dot,
    a[110], lg[1100000];
signed main() {
  int x;
  n = read(), k = read(), l = read();
  while (k--) {
    x = read();
    if (!wa[x]) wa[x] = 1, v[x] ^= 1, v[x + 1] ^= 1;
  }
  for (int i = 1; i <= n + 1; i++)
    if (v[i]) p[++dot] = i, lg[1 << (dot - 1)] = dot - 1;
  for (int i = 1; i <= l; i++) a[i] = read();
  for (int s = 1; s <= dot; s++) {
    memset(d, 0x3f, sizeof(d)), memset(v, 0, sizeof(v)),
        d[p[s]] = 0, q.push(make_pair(0, p[s]));
    while (!q.empty()) {
      int x = q.top().second;
      q.pop();
      if (v[x]) continue;
      v[x] = 1;
      for (int i = 1; i <= l; i++) {
        if (x + a[i] <= n + 1 && d[x + a[i]] > d[x] + 1)
          d[x + a[i]] = d[x] + 1, q.push(make_pair(d[x + a[i]], x + a[i]));
        if (x - a[i] >= 1 && d[x - a[i]] > d[x] + 1)
          d[x - a[i]] = d[x] + 1, q.push(make_pair(d[x - a[i]], x - a[i]));
      }
    }
    for (int i = 1; i <= dot; i++) D[s][i] = d[p[i]];
  }
  memset(f, 0x3f, sizeof(f)), f[0] = 0;
  for (int i = 1; i < 1 << dot; i++)
    for (int j = lg[i & -i] + 1; j < dot; j++)
      if ((i >> j) & 1)
        f[i] = min(f[i], f[i ^ (1 << lg[i & -i]) ^ (1 << j)] +
                             D[lg[i & -i] + 1][j + 1]);
  printf("%d\n", f[(1 << dot) - 1] == 0x3f3f3f3f ? -1 : f[(1 << dot) - 1]);
  return 0;
}
