#include <bits/stdc++.h>
using namespace std;
const int N = 10005, M = 105, K = (1 << 20) + 5, INF = 0x3f3f3f3f;
int n, m, kk, tot = -1;
int s[N], a[N], dis[M][M], size[M], f[K], d[N];
queue<int> q;
void bfs(int id) {
  memset(d, 0x3f, sizeof(d));
  d[id] = 0;
  q.push(id);
  while (!q.empty()) {
    int t = q.front();
    q.pop();
    for (int i = 1; i <= m; i++) {
      if (t + size[i] <= n + 1 && d[t + size[i]] == INF) {
        d[t + size[i]] = d[t] + 1;
        q.push(t + size[i]);
      }
      if (t - size[i] >= 1 && d[t - size[i]] == INF) {
        d[t - size[i]] = d[t] + 1;
        q.push(t - size[i]);
      }
    }
  }
  for (int i = 1; i <= n + 1; i++) {
    if (s[i]) {
      dis[s[id]][s[i]] = d[i];
    }
  }
}
int main() {
  memset(f, 0x3f, sizeof(f));
  memset(s, -1, sizeof(s));
  f[0] = 0;
  scanf("%d%d%d", &n, &kk, &m);
  for (int i = 1; i <= kk; i++) {
    int x;
    scanf("%d", &x);
    a[x] = 1;
  }
  for (int i = 1; i <= m; i++) scanf("%d", &size[i]);
  for (int i = n + 1; i >= 1; i--) a[i] ^= a[i - 1];
  for (int i = 1; i <= n + 1; i++) {
    if (a[i]) s[i] = ++tot;
  }
  for (int i = 1; i <= n + 1; i++) {
    if (a[i]) bfs(i);
  }
  for (int i = 0; i < (1 << tot + 1); i++) {
    if (f[i] == 0x3f3f3f3f) continue;
    for (int j = 0; j <= tot; j++) {
      if ((i >> j) & 1) continue;
      for (int k = j + 1; k <= tot; k++) {
        if (!((i >> k) & 1)) {
          int t = i ^ (1 << j) ^ (1 << k);
          f[t] = min(f[t], f[i] + dis[j][k]);
        }
      }
    }
  }
  if (f[(1 << tot + 1) - 1] == INF)
    printf("-1");
  else
    printf("%d", f[(1 << tot + 1) - 1]);
  return 0;
}
