#include <bits/stdc++.h>
using namespace std;
long long gi() {
  long long ret = 0;
  char ch = getchar();
  while ((ch < '0' || ch > '9') && ch != '-') ch = getchar();
  char c = ch == '-' ? getchar() : ch;
  while (c >= '0' && c <= '9') ret = ret * 10 + c - '0', c = getchar();
  return ch == '-' ? -ret : ret;
}
const int N = 10000 + 10;
const int inf = 707406378;
int n, k, l, a[N], b[N], pos[N], f[1 << 21], dis[21][N], q[N];
void ckmin(int &x, int y) { x = x < y ? x : y; }
int main() {
  n = gi();
  k = gi();
  l = gi();
  for (int i = 1; i <= k; i += 1) {
    int t = gi();
    b[t] ^= 1;
    b[t + 1] ^= 1;
  }
  int R = 0;
  ++n;
  for (int i = 1; i <= n; i += 1)
    if (b[i]) b[i] = ++R, pos[R] = i;
  memset(dis, 127 / 3, sizeof dis);
  memset(f, 127 / 3, sizeof f);
  for (int i = 1; i <= l; i += 1) a[i] = gi();
  for (int i = 1; i <= R; i += 1) {
    dis[i][pos[i]] = 0;
    int hd = 0, tl = 0;
    q[++tl] = pos[i];
    while (hd < tl) {
      int r = q[++hd];
      for (int j = 1; j <= l; j += 1) {
        if (r + a[j] <= n && dis[i][r + a[j]] >= inf)
          dis[i][r + a[j]] = dis[i][r] + 1, q[++tl] = r + a[j];
        if (r - a[j] > 0 && dis[i][r - a[j]] >= inf)
          dis[i][r - a[j]] = dis[i][r] + 1, q[++tl] = r - a[j];
      }
    }
  }
  f[0] = 0;
  for (int z = 0; z < (1 << R); z += 1) {
    for (int i = 1; i <= R; i += 1)
      if (~z & (1 << (i - 1)))
        for (int j = i + 1; j <= R; j += 1)
          if (~z & (1 << (j - 1)))
            ckmin(f[z | (1 << (i - 1)) | (1 << (j - 1))],
                  f[z] + dis[i][pos[j]]);
  }
  if (f[(1 << R) - 1] < inf)
    cout << f[(1 << R) - 1];
  else
    cout << -1;
  return 0;
}
