#include <bits/stdc++.h>
using namespace std;
const int N = 10000 + 10, M = 25, INF = 2000 * 1000;
vector<int> adj[N];
int dis[M][M], dp[1 << M], c, d[N];
short mrk[N], dpm[1 << M], mt;
short sit[N];
void bfs(int v) {
  int f = sit[v];
  queue<int> q;
  q.push(v);
  d[v] = 0;
  mrk[v] = mt;
  while (!q.empty()) {
    v = q.front();
    q.pop();
    if (sit[v]) {
      int tmp = sit[v];
      dis[tmp][f] = dis[f][tmp] = d[v];
    }
    for (int i = 0; i < (int)(adj[v]).size(); ++i) {
      int u = adj[v][i];
      if (mrk[u] != mt) {
        mrk[u] = mt;
        q.push(u);
        d[u] = d[v] + 1;
      }
    }
  }
}
int dpf(int x) {
  if (!x) return 0;
  if (dpm[x]) return dp[x];
  dp[x] = INF;
  dpm[x] = 1;
  bitset<22> num(x);
  int s;
  for (int i = 0; i < 22; ++i)
    if (num[i]) {
      s = i;
      break;
    }
  for (int i = s + 1; i < 22; ++i)
    if (num[i]) dp[x] = min(dp[x], dpf(x ^ (1 << s) ^ (1 << i)) + dis[s][i]);
  return dp[x];
}
void input() {
  int n, k, l, t;
  cin >> n >> k >> l;
  for (int i = 0; i < k; ++i) {
    cin >> t;
    sit[t] = 1;
  }
  for (int i = n + 1; i; --i) {
    sit[i] ^= sit[i - 1];
    if (sit[i]) {
      sit[i] = ++c;
    }
  }
  for (int i = 0; i < l; ++i) {
    cin >> t;
    for (int j = t + 1; j <= n + 1; ++j) {
      adj[j].push_back(j - t);
      adj[j - t].push_back(j);
    }
  }
}
int main() {
  ios::sync_with_stdio(false);
  for (int i = 0; i < M; ++i)
    for (int j = 0; j < M; ++j) dis[i][j] = INF;
  input();
  for (int i = 1; i < N; ++i)
    if (sit[i]) {
      ++mt;
      bfs(i);
    }
  int ans = dpf(2 * ((1 << c) - 1));
  if (ans >= INF)
    cout << -1 << endl;
  else
    cout << ans << endl;
  return 0;
}
