#include <bits/stdc++.h>
using std::make_pair;
template <typename T>
inline T read() {
  T x = 0;
  char ch = std::getchar();
  bool f = 0;
  while (!std::isdigit(ch)) f = (ch == '-'), ch = std::getchar();
  while (std::isdigit(ch)) x = x * 10 + (ch - '0'), ch = std::getchar();
  return f ? -x : x;
}
template <typename T>
void print(T x) {
  if (x < 0) {
    x = -x;
    std::putchar('-');
  }
  if (x < 10) {
    std::putchar(x + 48);
    return;
  }
  print<T>(x / 10);
  std::putchar(x % 10 + 48);
  return;
}
namespace Solution {
using std::cin;
using std::cout;
using std::deque;
using std::endl;
using std::map;
using std::pair;
using std::queue;
using std::set;
using std::vector;
const int N = 204001, mod = 1e9 + 7;
int n, a[N], b[N], cnt[10], cnt1[10];
void Fakemain() {
  n = read<int>();
  for (int i = 1; i <= n; ++i) {
    cnt[a[i] = read<int>()]++;
  }
  for (int j = 1; j <= n; ++j) {
    cnt[b[j] = read<int>()]++;
  }
  for (int i = 1; i <= 5; ++i) {
    if (cnt[i] & 1) {
      puts("-1");
      return;
    }
  }
  for (int i = 1; i <= n; ++i) {
    cnt1[a[i]]++;
  }
  int ans(0);
  for (int i = 1; i <= 5; ++i) {
    ans += abs(cnt1[i] - cnt[i] / 2);
  }
  print<int>(ans / 2), putchar(' ');
  return;
}
}  // namespace Solution
int main(int argc, char* argv[]) {
  Solution::Fakemain();
  return 0;
}
