#include <bits/stdc++.h>
using namespace std;
const int N = 10005;
int n, k, l, v[N], a[N], x, tot, b[N], f[22][22], dis[N], dp[1 << 20 | 1];
queue<int> q;
int main() {
  scanf("%d%d%d", &n, &k, &l);
  for (int i = 1; i <= k; i++) scanf("%d", &x), v[x] = 1;
  for (int i = 1; i <= n; i++)
    if (v[i] != v[i - 1]) a[tot++] = i;
  if (tot & 1) a[tot++] = n + 1;
  sort(a, a + tot);
  for (int i = 1; i <= l; i++) scanf("%d", &b[i]);
  for (int i = 0; i < tot; i++) {
    memset(dis, 0x3f, sizeof dis);
    dis[a[i]] = 0;
    q.push(a[i]);
    while (!q.empty()) {
      int x = q.front();
      q.pop();
      for (int i = 1; i <= l; i++) {
        if (x > b[i] && dis[x - b[i]] > 1e9) {
          dis[x - b[i]] = dis[x] + 1;
          q.push(x - b[i]);
        }
        if (x + b[i] <= n + 1 && dis[x + b[i]] > 1e9) {
          dis[x + b[i]] = dis[x] + 1;
          q.push(x + b[i]);
        }
      }
    }
    for (int j = 0; j < tot; j++) f[i][j] = dis[a[j]];
  }
  memset(dp, 0x3f, sizeof dp);
  dp[0] = 0;
  for (int i = 1; i < 1 << tot; i++) {
    int id = 0;
    for (int j = 0; j < tot; j++)
      if ((1 << j) & i) id = j;
    for (int j = 0; j < tot; j++)
      if (((1 << j) & i) && id != j)
        dp[i] = min(dp[i ^ (1 << j) ^ (1 << id)] + f[j][id], dp[i]);
  }
  if (dp[(1 << tot) - 1] > 1e9)
    puts("-1");
  else
    printf("%d\n", dp[(1 << tot) - 1]);
  return 0;
}
