#include <bits/stdc++.h>
using namespace std;
const int inf = 1e9;
const int N = 2e6 + 5;
const int K = 25;
int n, k, m, d[K][N], b[N], f[N], fir[N], len, flag[N], pos[N];
bool vis[N];
void bfs(int s, int ss) {
  for (int i = 1; i <= n + 1; i++) vis[i] = false, d[s][i] = inf;
  queue<int> q;
  d[s][ss] = 0;
  q.push(ss);
  while (!q.empty()) {
    int u = q.front();
    q.pop();
    vis[u] = false;
    for (int i = 1; i <= m; i++) {
      if (u + b[i] - 1 <= n)
        if (d[s][u + b[i]] > d[s][u] + 1) {
          d[s][u + b[i]] = d[s][u] + 1;
          if (!vis[u + b[i]]) {
            vis[u + b[i]] = true;
            q.push(u + b[i]);
          }
        }
      if (u - b[i] >= 1)
        if (d[s][u - b[i]] > d[s][u] + 1) {
          d[s][u - b[i]] = d[s][u] + 1;
          if (!vis[u - b[i]]) {
            vis[u - b[i]] = true;
            q.push(u - b[i]);
          }
        }
    }
  }
}
int dfs(int S) {
  if (!S) return 0;
  if (f[S]) return f[S];
  f[S] = inf;
  for (int i = fir[S] + 1; i <= len; i++)
    if (S & (1 << (i - 1))) {
      int state = S - (1 << (fir[S] - 1)) - (1 << (i - 1));
      f[S] = min(f[S], dfs(state) + d[fir[S]][pos[i]]);
    }
  return f[S];
}
int main() {
  scanf("%d%d%d", &n, &k, &m);
  for (int i = 1; i <= k; i++) {
    int a;
    scanf("%d", &a);
    flag[a] ^= 1;
    flag[a + 1] ^= 1;
  }
  for (int i = 1; i <= m; i++) scanf("%d", &b[i]);
  for (int i = 1; i <= n + 1; i++)
    if (flag[i]) {
      pos[++len] = i;
      bfs(len, i);
    }
  for (int i = 1; i < (1 << len); i++) {
    for (int j = 1; j <= len; j++)
      if (i & (1 << (j - 1))) {
        fir[i] = j;
        break;
      }
  }
  dfs((1 << len) - 1);
  if (f[(1 << len) - 1] == inf)
    printf("-1");
  else
    printf("%d", f[(1 << len) - 1]);
  return 0;
}
