#include <bits/stdc++.h>
using namespace std;
const int inf = 1e9 + 10;
struct tree {
  struct node {
    int mn, radd;
  };
  int v, tl, tr;
  vector<node> t;
  void init(int n) {
    tl = 1;
    tr = n;
    v = 1;
    t.resize(5 * n);
  }
  void build(int v, int tl, int tr, vector<int> &a) {
    if (tl == tr) {
      t[v].mn = a[tl];
      t[v].radd = 0;
    } else {
      int tm = tl + tr >> 1;
      build(v << 1, tl, tm, a);
      build(v << 1 | 1, tm + 1, tr, a);
      t[v].mn = min(t[v << 1].mn, t[v << 1 | 1].mn);
      t[v].radd = 0;
    }
  }
  void build(vector<int> &a) { build(v, tl, tr, a); }
  void push(int v) {
    if (t[v].radd) {
      t[v << 1].mn -= t[v].radd;
      t[v << 1 | 1].mn -= t[v].radd;
      t[v << 1].radd += t[v].radd;
      t[v << 1 | 1].radd += t[v].radd;
      t[v].radd = 0;
    }
  }
  void modify(int v, int tl, int tr, int l, int r, int val) {
    if (l > r) {
      return;
    }
    if (tl == l && tr == r) {
      t[v].mn -= val;
      t[v].radd += val;
    } else {
      push(v);
      int tm = tl + tr >> 1;
      modify(v << 1, tl, tm, l, min(r, tm), val);
      modify(v << 1 | 1, tm + 1, tr, max(l, tm + 1), r, val);
      t[v].mn = min(t[v << 1].mn, t[v << 1 | 1].mn);
    }
  }
  void modify(int l, int r, int val) { modify(v, tl, tr, l, r, val); }
  int get(int v, int tl, int tr, int l, int r) {
    if (l > r) {
      return inf;
    }
    if (tl == l && tr == r) {
      return t[v].mn;
    }
    push(v);
    int tm = tl + tr >> 1;
    int ql = get(v << 1, tl, tm, l, min(r, tm));
    int qr = get(v << 1 | 1, tm + 1, tr, max(l, tm + 1), r);
    return min(ql, qr);
  }
  int get(int l, int r) { return get(v, tl, tr, l, r); }
};
void solve() {
  int n, m, k;
  cin >> n >> m >> k;
  vector<vector<int> > a(3);
  for (int i = 0; i < n; i++) {
    int x;
    cin >> x;
    a[0].push_back(x);
  }
  for (int i = 0; i < m; i++) {
    int x;
    cin >> x;
    a[1].push_back(x);
  }
  for (int i = 0; i < k; i++) {
    int x;
    cin >> x;
    a[2].push_back(x);
  }
  for (int it = 0; it < 3; it++) {
    sort(a[it].begin(), a[it].end());
  }
  int N = n + m + k;
  tree str;
  str.init(N);
  vector<int> ans_suff(N + 1), lul(1, 0);
  for (int suff = 1; suff <= N; suff++) {
    int num = lower_bound(a[2].begin(), a[2].end(), suff) - a[2].begin();
    int res = num;
    int ok = a[2].size() - num;
    res += (N - suff + 1) - ok;
    lul.push_back(res);
  }
  str.build(lul);
  for (auto x : a[0]) {
    str.modify(1, x, 1);
  }
  int ans = min(str.get(1, N), int(a[2].size())) + a[0].size();
  ans = min(ans, n + k);
  ans = min(ans, n + m);
  ans = min(ans, m + k);
  vector<int> cnt(N + 1), cnt1(N + 1);
  for (auto x : a[0]) {
    cnt[x]++;
  }
  for (auto x : a[2]) {
    cnt1[x]++;
  }
  for (int x = 1; x <= N; x++) {
    if (!cnt[x] && cnt1[x]) {
      str.modify(x + 1, N, 1);
    }
    int ind = lower_bound(a[0].begin(), a[0].end(), x + 1) - a[0].begin();
    int ok = ind;
    int res = a[0].size() - ind;
    res += (x - ok);
    int res1 = str.get(x + 1, N);
    ans = min(ans, res + res1);
  }
  cout << ans << "\n";
}
int main() {
  cin.tie(0);
  ios::sync_with_stdio(0);
  int test;
  test = 1;
  while (test--) {
    solve();
  }
  return 0;
}
