#include <bits/stdc++.h>
using namespace std;
typedef int arr[1100010];
int n, k, l, tot;
arr f, a, inq, lst, ans, x;
int dis[30][1100010];
void spfa(int st, int dis[]) {
  for (int i = 0; i <= n; i++) dis[i] = 1000000000;
  inq[dis[lst[0] = st] = 0] = 1;
  for (int op = 0, cl = 1; op < cl;) {
    int now = lst[(op++) % 1100010];
    for (int i = 1, j; i <= l; i++) {
      if ((j = now + a[i]) <= n && dis[now] + 1 < dis[j]) {
        if (!inq[j]) inq[j] = 1, lst[(cl++) % 1100010] = j;
        dis[j] = dis[now] + 1;
      }
      if ((j = now - a[i]) >= 0 && dis[now] + 1 < dis[j]) {
        if (!inq[j]) inq[j] = 1, lst[(cl++) % 1100010] = j;
        dis[j] = dis[now] + 1;
      }
    }
    inq[now] = 0;
  }
}
int main() {
  scanf("%d%d%d", &n, &k, &l);
  for (int i = 1, j; i <= k; i++) {
    scanf("%d", &j);
    f[j] = 1;
  }
  for (int i = 1; i <= l; i++) {
    scanf("%d", a + i);
  }
  f[n + 1] = 0;
  for (int i = 0; i <= n; i++) {
    f[i] = f[i] != f[i + 1];
  }
  for (int i = 0; i <= n; i++) {
    if (f[i]) spfa(x[tot] = i, dis[tot]), tot++;
  }
  int ub = 1 << tot;
  for (int i = 1; i < ub; i++) {
    int u = i & -i, v, temp = u;
    for (v = 0; temp > 1; temp >>= 1, v++)
      ;
    ans[i] = 1000000000;
    for (int k = 1, j = 0, r; k <= i; j++, k <<= 1) {
      if (k != u && (i & k) == k && ~ans[r = i ^ k ^ u] &&
          dis[v][x[j]] != 1000000000) {
        ans[i] = min(ans[i], ans[r] + dis[v][x[j]]);
      }
    }
    if (ans[i] == 1000000000) ans[i] = -1;
  }
  printf("%d\n", ans[ub - 1]);
}
