#include <bits/stdc++.h>
using namespace std;
int i, j, k, n, m, K, O, x;
int a[10010], b[10010], id[10010], g[10010], gg[10010], f[1 << 20], c[20][20];
int main() {
  scanf("%d%d%d", &n, &K, &m);
  n++;
  for (i = 1; i <= K; i++) {
    scanf("%d", &x);
    a[x] ^= 1, a[x + 1] ^= 1;
  }
  for (i = 1; i <= m; i++) scanf("%d", &b[i]);
  for (i = 1; i <= n; i++)
    if (a[i]) id[i] = ++O;
  for (i = 1; i <= n; i++)
    if (a[i]) {
      int l, r;
      for (j = 1; j <= n; j++) gg[j] = -1;
      g[l = r = 1] = i;
      gg[i] = 0;
      for (; l <= r; l++) {
        int A = g[l];
        for (j = 1; j <= m; j++)
          for (k = -1; k <= 1; k++) {
            int B = A + k * b[j];
            if (B > 0 && B <= n && gg[B] < 0) {
              gg[B] = gg[A] + 1;
              g[++r] = B;
            }
          }
      }
      for (j = 1; j <= n; j++)
        if (a[j] && gg[j] >= 0 && j != i) {
          int A = id[i], B = id[j];
          if (A > B) swap(A, B);
          c[A - 1][B - 1] = gg[j];
        }
    }
  memset(f, 120, sizeof(f));
  f[0] = 0;
  int nn = (1 << O) - 1;
  for (i = 0; i <= nn; i++)
    if (f[i] < 1e9) {
      for (j = 0; j <= O - 1; j++)
        if (!(i >> j & 1)) {
          for (k = j + 1; k <= O - 1; k++)
            if (!(i >> k & 1) && c[j][k]) {
              int A = i | 1 << j | 1 << k;
              f[A] = min(f[A], f[i] + c[j][k]);
            }
        }
    }
  printf("%d\n", f[nn] > 1e9 ? -1 : f[nn]);
  return 0;
}
