#include <bits/stdc++.h>
using namespace std;
int n, m, k, num[100005], tmp, sz[105], f[1048578], d[25][25];
bool flag[100005], vis[100005];
int q[100005], l, r, dis[100005];
int main() {
  scanf("%d%d%d", &n, &k, &m);
  for (int i = 1, a; i <= k; ++i) {
    scanf("%d", &a);
    flag[a] = 1;
  }
  for (int i = 1; i <= m; ++i) scanf("%d", &sz[i]);
  for (int i = 0; i <= n; ++i)
    if (flag[i] != flag[i + 1]) num[tmp++] = i;
  for (int i = 0, u, p; i < tmp; ++i) {
    memset(dis, 0x3f3f3f3f, sizeof dis);
    l = r = 0;
    q[++r] = num[i];
    dis[num[i]] = 0;
    while (l < r) {
      u = q[++l];
      vis[u] = 0;
      for (int j = 1; j <= m; ++j) {
        p = u + sz[j];
        if (p <= n && dis[p] > dis[u] + 1) {
          dis[p] = dis[u] + 1;
          if (!vis[p]) {
            q[++r] = p;
            vis[p] = 1;
          }
        }
        p = u - sz[j];
        if (p >= 0 && dis[p] > dis[u] + 1) {
          dis[p] = dis[u] + 1;
          if (!vis[p]) {
            q[++r] = p;
            vis[p] = 1;
          }
        }
      }
    }
    for (int j = 0; j < tmp; ++j) d[i][j] = dis[num[j]];
  }
  memset(f, 0x3f3f3f3f, sizeof f);
  int End = 1 << tmp;
  f[0] = 0;
  for (int s = 0, ss; s < End; ++s)
    if (f[s] != 0x3f3f3f3f)
      for (int i = 0; i < tmp; ++i)
        if (!(s & (1 << i))) {
          for (int j = i + 1; j < tmp; ++j)
            if (!(s & (1 << j))) {
              ss = s | (1 << i) | (1 << j);
              f[ss] = min(f[ss], f[s] + d[i][j]);
            }
          break;
        }
  if (f[End - 1] != 0x3f3f3f3f)
    printf("%d\n", f[End - 1]);
  else
    puts("-1");
  return 0;
}
