#include <bits/stdc++.h>
using namespace std;
int n, k, m, dis[25][25], cf[10010], a[10010], cnt = -1, loc[10010], w[10010],
                                               f[(1 << 20) + 10];
void bfs(int s) {
  memset(w, 0, sizeof(w));
  for (int i = 1; i <= n + 1; i++) w[i] = 0x3f3f3f3f;
  queue<int> q;
  q.push(s);
  w[s] = 0;
  while (!q.empty()) {
    int x = q.front();
    q.pop();
    for (int i = 1; i <= m; i++) {
      int pre = x - a[i], nxt = x + a[i];
      if (pre > 0 && w[pre] == 0x3f3f3f3f) w[pre] = w[x] + 1, q.push(pre);
      if (nxt <= n + 1 && w[nxt] == 0x3f3f3f3f) w[nxt] = w[x] + 1, q.push(nxt);
    }
  }
  for (int i = 1; i <= n + 1; i++)
    if (loc[i] >= 0) dis[loc[s]][loc[i]] = w[i];
}
int main() {
  scanf("%d%d%d", &n, &k, &m);
  for (int i = 1; i <= k; i++) {
    int x;
    scanf("%d", &x);
    cf[x] = 1;
  }
  for (int i = 1; i <= m; i++) scanf("%d", &a[i]);
  for (int i = n + 1; i; i--) cf[i] ^= cf[i - 1];
  memset(loc, -1, sizeof(loc));
  for (int i = 1; i <= n + 1; i++)
    if (cf[i]) loc[i] = ++cnt;
  cnt++;
  for (int i = 1; i <= n + 1; i++)
    if (cf[i]) bfs(i);
  for (int i = 1; i < (1 << cnt); i++) f[i] = 0x3f3f3f3f;
  for (int i = 0; i < (1 << cnt); i++) {
    if (f[i] == 0x3f3f3f3f) continue;
    for (int j = 0; j < cnt; j++) {
      if ((i >> j) & 1) continue;
      for (int k = j + 1; k < cnt; k++)
        if (!((i >> k) & 1))
          f[i + (1 << j) + (1 << k)] =
              ((f[i + (1 << j) + (1 << k)]) < (f[i] + dis[j][k])
                   ? (f[i + (1 << j) + (1 << k)])
                   : (f[i] + dis[j][k]));
    }
  }
  printf("%d", f[(1 << cnt) - 1] == 0x3f3f3f3f ? -1 : f[(1 << cnt) - 1]);
  return 0;
}
