#include <bits/stdc++.h>
using namespace std;
const int N = 1e4 + 7, K = 23, L = 105;
const int inf = 1e9 + 7;
int n, k, l;
int dist[K][K];
int a[N], pos[N], len[L];
int f[1 << K];
int q[N], step[N], st, ed;
bool used[N];
void getdis(int begin) {
  memset(used, false, sizeof(used));
  for (int i = 0; i < k; i++) dist[begin][i] = inf;
  st = 0, ed = 1, q[ed] = pos[begin];
  step[ed] = 0, used[q[ed]] = true;
  while (st != ed) {
    int u = q[++st];
    for (int i = 0; i < l; i++) {
      int v = u + len[i];
      if (v <= n + 1 && !used[v]) {
        q[++ed] = v;
        step[ed] = step[st] + 1;
        used[v] = true;
        if (a[v] != -1) dist[begin][a[v]] = step[ed];
      }
      v = u - len[i];
      if (v > 0 && !used[v]) {
        q[++ed] = v;
        step[ed] = step[st] + 1;
        used[v] = true;
        if (a[v] != -1) dist[begin][a[v]] = step[ed];
      }
    }
  }
}
int main() {
  scanf("%d%d%d", &n, &k, &l);
  memset(a, -1, sizeof(a));
  for (int i = 0; i < k; i++) {
    int p;
    scanf("%d", &p);
    a[p] = 1;
  }
  for (int i = 0; i < l; i++) scanf("%d", len + i);
  k = 0;
  for (int i = n + 1; i > 0; i--) {
    a[i] = (a[i] == a[i - 1] ? -1 : 1);
    if (a[i] == 1) {
      a[i] = k;
      pos[k] = i;
      ++k;
    }
  }
  for (int i = 0; i < k; i++) getdis(i);
  f[0] = 0;
  for (int comb = 1; comb < 1 << k; ++comb) {
    int x = 0;
    f[comb] = inf;
    while (!((comb >> x) & 1)) ++x;
    for (int i = 0; i < k; i++) {
      if ((x == i) || !((comb >> i) & 1) || dist[x][i] == inf) continue;
      int ncomb = comb ^ (1 << i) ^ (1 << x);
      if (f[ncomb] == inf) continue;
      f[comb] = min(f[comb], f[ncomb] + dist[x][i]);
    }
  }
  if (f[(1 << k) - 1] == inf)
    puts("-1");
  else
    printf("%d\n", f[(1 << k) - 1]);
  return 0;
}
