#include <bits/stdc++.h>
using namespace std;
const int MAXN = 10005;
int n, k, m, a[MAXN], s[MAXN], sum, num[MAXN];
int v[MAXN], d[MAXN], dist[25][25], f[1 << 21];
queue<int> q;
void bfs(int x, int id) {
  memset(v, 0, sizeof(v));
  memset(d, 0x3f, sizeof(d));
  q.push(x);
  v[x] = 1;
  d[x] = 0;
  while (!q.empty()) {
    x = q.front();
    q.pop();
    for (int i = 1; i <= m; i++) {
      int t = s[i];
      if (x + t <= n && !v[x + t])
        v[x + t] = 1, d[x + t] = d[x] + 1, q.push(x + t);
      if (x - t >= 1 && !v[x - t])
        v[x - t] = 1, d[x - t] = d[x] + 1, q.push(x - t);
    }
  }
  for (int i = 1; i <= sum; i++)
    if (v[num[i]])
      dist[id][i] = d[num[i]];
    else
      dist[id][i] = 1e9;
}
int main() {
  scanf("%d%d%d", &n, &k, &m);
  for (int i = 1; i <= k; i++) {
    int x;
    scanf("%d", &x);
    a[x] = 1;
  }
  for (int i = 1; i <= m; i++) scanf("%d", &s[i]);
  n++;
  for (int i = n; i >= 1; i--) a[i] ^= a[i - 1];
  for (int i = 1; i <= n; i++)
    if (a[i]) a[i] = ++sum, num[sum] = i;
  for (int i = 1; i <= n; i++)
    if (a[i]) bfs(i, a[i]);
  for (int i = 1; i < (1 << sum); i++) f[i] = 1e9;
  for (int i = 0; i < (1 << sum); i++) {
    int j = 0;
    for (int k = 1; k <= sum && j == 0; k++)
      if ((1 << k - 1) & i) j = k;
    for (int k = 1; k <= sum; k++)
      if ((1 << k - 1) & i)
        f[i] = min(f[i], f[i ^ (1 << j - 1) ^ (1 << k - 1)] + dist[j][k]);
  }
  printf("%d", f[(1 << sum) - 1] >= 1e9 ? -1 : f[(1 << sum) - 1]);
  return 0;
}
