#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int sum = 0, t = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') t = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    sum = sum * 10 + ch - '0';
    ch = getchar();
  }
  return sum * t;
}
int n, k, l;
int x[2050], a[2050];
int p[2050 << 1], lg2[2050 * 2050];
int edge[30][30], f[2050 * 2050];
int dis[2050 * 10];
void bfs(int S) {
  queue<int> q;
  memset(dis, -1, sizeof(dis));
  q.push(S);
  dis[S] = 0;
  while (!q.empty()) {
    int x = q.front();
    q.pop();
    for (int i = 1; i <= l; i++) {
      int t = x + a[i];
      if (t <= n && dis[t] == -1) dis[t] = dis[x] + 1, q.push(t);
      t = x - a[i];
      if (t >= 0 && dis[t] == -1) dis[t] = dis[x] + 1, q.push(t);
    }
  }
}
int main() {
  n = read(), k = read(), l = read();
  for (int i = 1; i <= k; i++) x[i] = read();
  for (int i = 1; i <= l; i++) a[i] = read();
  sort(a + 1, a + l + 1);
  l = unique(a + 1, a + l + 1) - a - 1;
  int K_ = 0;
  x[0] = x[1], x[k + 1] = x[k];
  for (int i = 1; i <= k; i++) {
    if (x[i] != x[i - 1] + 1) p[K_++] = x[i] - 1;
    if (x[i] != x[i + 1] - 1) p[K_++] = x[i];
  }
  k = K_;
  for (int i = 0; i < k; i++) lg2[1 << i] = i;
  for (int i = 0; i < k; i++) {
    bfs(p[i]);
    for (int j = 0; j < k; j++)
      if (dis[p[j]] != -1)
        edge[i][j] = dis[p[j]];
      else
        edge[i][j] = 0x3f3f3f3f;
  }
  memset(f, -1, sizeof(f));
  f[0] = 0;
  for (int S = 1; S < 1 << k; S++) {
    int s0 = S & -S;
    f[S] = 0x3f3f3f3f;
    int S_ = S ^ s0;
    for (int i = 0; i < k; i++)
      if (S_ >> i & 1)
        f[S] = min(f[S], f[S ^ s0 ^ (1 << i)] + edge[lg2[s0]][i]);
  }
  if (f[(1 << k) - 1] != 0x3f3f3f3f)
    printf("%d\n", f[(1 << k) - 1]);
  else
    puts("-1");
}
