#include <bits/stdc++.h>
using namespace std;
int n, m, k;
bool debug = false;
int l;
int ks[25];
set<int> a;
int dis[10005];
long long dp[1 << 20], mp[22][22];
void bfs(int x) {
  for (int i = 0; i <= n; i++) dis[i] = 2147483647;
  queue<int> q;
  q.push(x);
  dis[x] = 0;
  while (!q.empty()) {
    int u = q.front();
    q.pop();
    for (int aa : a) {
      if (u + aa <= n && dis[u + aa] > dis[u] + 1) {
        dis[u + aa] = dis[u] + 1;
        q.push(u + aa);
      }
      if (u - aa >= 0 && dis[u - aa] > dis[u] + 1) {
        dis[u - aa] = dis[u] + 1;
        q.push(u - aa);
      }
    }
  }
}
int main() {
  scanf("%d%d%d", &n, &k, &l);
  int x;
  for (int i = 0; i < k; i++) {
    scanf("%d", ks + i);
    ks[i]--;
    ks[k + i] = ks[i] + 1;
  }
  for (int i = 0; i < l; i++) {
    scanf("%d", &x);
    a.insert(x);
  }
  k *= 2;
  for (int i = 0; i < k; i++) {
    bfs(ks[i]);
    for (int j = 0; j < k; j++) mp[i][j] = dis[ks[j]];
  }
  for (int i = 1; i < (1 << k); i++) {
    dp[i] = 2147483647;
  }
  for (int ma = 1; ma < (1 << k); ma++) {
    int i = 0;
    for (i = 0; i < k; i++)
      if ((ma >> i) & 1) break;
    for (int j = 0; j < k; j++)
      if (j != i && ((ma >> j) & 1)) {
        if (mp[i][j] < 0) {
          cout << i << j << endl;
        }
        dp[ma] = min(dp[ma], dp[ma ^ (1 << i) ^ (1 << j)] + mp[i][j]);
      }
  }
  if (dp[(1 << k) - 1] == 2147483647)
    puts("-1");
  else
    printf("%d\n", dp[(1 << k) - 1]);
  return 0;
}
