#include <bits/stdc++.h>
using namespace std;
int ans = 0;
struct tree {
  int l, r;
  int max;
} t[500010 << 2];
int max(int a, int b) { return a > b ? a : b; }
void pushup(int p) { t[p].max = max(t[(p << 1)].max, t[((p << 1) | 1)].max); }
void build(int p, int l, int r) {
  t[p].l = l, t[p].r = r, t[p].max = 0;
  if (l == r) return;
  build((p << 1), l, ((t[p].l + t[p].r) >> 1));
  build(((p << 1) | 1), ((t[p].l + t[p].r) >> 1) + 1, r);
}
void add(int p, int x, int val) {
  if (t[p].l == t[p].r) {
    t[p].max = val;
    return;
  }
  if (x > ((t[p].l + t[p].r) >> 1))
    add(((p << 1) | 1), x, val);
  else
    add((p << 1), x, val);
  pushup(p);
}
int query(int p, int l, int r) {
  if (t[p].l == l && t[p].r == r) {
    return t[p].max;
  }
  if (l > ((t[p].l + t[p].r) >> 1))
    return query(((p << 1) | 1), l, r);
  else if (r <= ((t[p].l + t[p].r) >> 1))
    return query((p << 1), l, r);
  else
    return max(query((p << 1), l, ((t[p].l + t[p].r) >> 1)),
               query(((p << 1) | 1), ((t[p].l + t[p].r) >> 1) + 1, r));
}
int tmp[500010], a[500010];
int search(int x, int num) {
  int mi = 1, ma = num, Mid;
  while (mi <= ma) {
    Mid = (mi + ma) >> 1;
    if (tmp[Mid] == x) return Mid;
    if (tmp[Mid] < x)
      mi = Mid + 1;
    else
      ma = Mid - 1;
  }
}
struct node {
  int x, y, z;
} lady[500010];
bool cmp(node a, node b) { return a.x > b.x; }
int vis[500010];
int solve(int l, int r, int num) {
  int i, sum = 0;
  for (i = l; i <= r; i++) {
    int tt = search(lady[i].y, num);
    if (query(1, tt + 1, num + 1) > lady[i].z) sum++;
  }
  for (i = l; i <= r; i++) {
    int tt = search(lady[i].y, num);
    if (lady[i].z > vis[tt]) {
      vis[tt] = lady[i].z;
      add(1, tt, lady[i].z);
    }
  }
  return sum;
}
int main() {
  int n, i;
  memset(vis, 0, sizeof(vis));
  scanf("%d", &n);
  for (i = 1; i <= n; i++) scanf("%d", &lady[i].x);
  for (i = 1; i <= n; i++) {
    scanf("%d", &lady[i].y);
    a[i] = lady[i].y;
  }
  for (i = 1; i <= n; i++) scanf("%d", &lady[i].z);
  sort(a + 1, a + n + 1);
  int num = 1;
  tmp[1] = a[1];
  for (i = 2; i <= n; i++)
    if (a[i] != a[i - 1]) tmp[++num] = a[i];
  build(1, 1, num + 1);
  sort(lady + 1, lady + n + 1, cmp);
  int l = 1, r = 1;
  lady[0].x = lady[1].x;
  for (i = 1; i <= n; i++) {
    if (lady[i].x != lady[i - 1].x) {
      ans += solve(l, r, num);
      l = r = i;
    } else
      r = i;
  }
  ans += solve(l, r, num);
  printf("%d\n", ans);
  return 0;
}
