#include <bits/stdc++.h>
int n, k, l, x, t, p, c[10100], d[10100], q[10100], a[10100], g[30][10100],
    h[10100], f[2000000];
int main() {
  scanf("%d%d%d", &n, &k, &l);
  for (int i = 0; i < k; i++) scanf("%d", &x), c[x] = 1;
  for (int i = 0; i < l; i++) scanf("%d", a + i);
  for (int i = 0; i < n + 1; i++)
    if (c[i] ^= c[i + 1]) {
      memset(d, 0, sizeof(d));
      q[(t = 1) - 1] = i;
      d[i] = 1;
      for (int j = 0; j < t; j++)
        for (int k = 0; k < l; k++) {
          if (q[j] >= a[k] && !d[q[j] - a[k]])
            d[q[t++] = q[j] - a[k]] = d[q[j]] + 1;
          if (q[j] + a[k] <= n && !d[q[j] + a[k]])
            d[q[t++] = q[j] + a[k]] = d[q[j]] + 1;
        }
      for (int j = 0; j < n + 1; j++) g[p][j] = d[j] ? d[j] - 1 : 0x30303030;
      h[p++] = i;
    }
  memset(f, 0x30, sizeof(f));
  f[0] = 0;
  for (int i = 0; i < (1 << p); i++)
    for (int j = 0; j < p; j++)
      if ((~i >> j) & 1)
        for (int k = j + 1; k < p; k++)
          if ((~i >> k) & 1)
            f[i | (1 << j) | (1 << k)] =
                std::min(f[i | (1 << j) | (1 << k)], f[i] + g[j][h[k]]);
  printf("%d\n", f[(1 << p) - 1] < 100000000 ? f[(1 << p) - 1] : -1);
}
