#include <bits/stdc++.h>
using namespace std;
static const double EPS = 1e-9;
static const double PI = acos(-1.0);
int n, k, l;
int m;
int seq[10010];
int indexes[30];
int step[200];
int dist[30][10010];
int dp[1 << 20];
void calcDist(int s) {
  queue<pair<int, int> > que;
  dist[s][indexes[s]] = 0;
  que.push(make_pair(indexes[s], 0));
  while (!que.empty()) {
    int x = que.front().first;
    int ncost = que.front().second + 1;
    que.pop();
    for (int i = 0; i < (int)(l); i++) {
      int nx = x + step[i];
      if (nx > n || dist[s][nx] != -1) {
        continue;
      }
      dist[s][nx] = ncost;
      que.push(make_pair(nx, ncost));
    }
    for (int i = 0; i < (int)(l); i++) {
      int nx = x - step[i];
      if (nx < 0 || dist[s][nx] != -1) {
        continue;
      }
      dist[s][nx] = ncost;
      que.push(make_pair(nx, ncost));
    }
  }
}
int calc(int depth, int use) {
  if (dp[use] != -1) {
    return dp[use];
  }
  if (depth == m) {
    return dp[use] = 0;
  }
  if (use & (1 << depth)) {
    return calc(depth + 1, use);
  }
  int ret = (1 << 24);
  for (int i = 0; i < (int)(m); i++) {
    if (i == depth) {
      continue;
    }
    if (use & (1 << i)) {
      continue;
    }
    int d = dist[depth][indexes[i]];
    if (d == -1) {
      continue;
    }
    int nuse = use ^ (1 << depth) ^ (1 << i);
    ret = min(ret, calc(depth + 1, nuse) + d);
  }
  return dp[use] = ret;
}
int main() {
  while (scanf("%d %d %d", &n, &k, &l) > 0) {
    memset((seq), 0, sizeof(seq));
    memset((dist), -1, sizeof(dist));
    memset((dp), -1, sizeof(dp));
    m = 0;
    for (int i = 0; i < (int)(k); i++) {
      int x;
      scanf("%d", &x);
      x--;
      seq[x] ^= 1;
      seq[x + 1] ^= 1;
    }
    for (int i = 0; i < (int)(n + 1); i++) {
      if (seq[i]) {
        indexes[m++] = i;
      }
    }
    for (int i = 0; i < (int)(l); i++) {
      scanf("%d", &step[i]);
    }
    for (int s = 0; s < (int)(m); s++) {
      calcDist(s);
    }
    int ans = calc(0, 0);
    if (ans > (1 << 20)) {
      puts("-1");
    } else {
      printf("%d\n", ans);
    }
  }
}
