#include <bits/stdc++.h>   using namespace std;   inline long long read() {     long long f = 1, x = 0;     char ch = getchar();     while (!isdigit(ch)) {       if (ch ==  - ) f = -1;       ch = getchar();     }     while (isdigit(ch)) {       x = x * 10 + ch -  0 ;       ch = getchar();     }     return x * f;   }   const int MAXN = 1e5 + 5;   struct BIT {     int N, c[MAXN << 1];     inline int lowbit(int x) { return x & (-x); }     void add(int p, int x) {       for (; p <= N; p += lowbit(p)) c[p] += x;     }     int ask(int p) {       int res = 0;       for (; p > 0; p -= lowbit(p)) res += c[p];       return res;     }   } T;   int n, m, p[MAXN], s[MAXN], b[MAXN], inc[MAXN], pref[MAXN], p1[MAXN], p2[MAXN],       p3[MAXN << 1], ans[MAXN];   void lisanhua(int *p1, int *p2, int *p3) {     vector<int> v;     for (int i = 1; i <= n; ++i) v.push_back(p1[i]);     for (int i = 1; i <= m; ++i) v.push_back(p2[i]);     sort(v.begin(), v.end());     v.erase(unique(v.begin(), v.end()), v.end());     for (int i = 1; i <= n; ++i)       p3[i] = lower_bound(v.begin(), v.end(), p1[i]) - v.begin() + 1;     for (int i = 1; i <= m; ++i)       p3[i + n] = lower_bound(v.begin(), v.end(), p2[i]) - v.begin() + 1;   }   struct node {     int x, y, z, typ, id;   } q[MAXN << 1], tmp[MAXN << 1];   bool cmp1(node a, node b) {     return (a.x < b.x) || (a.x == b.x && a.y < b.y) ||            (a.x == b.x && a.y == b.y && a.z < b.z) ||            (a.x == b.x && a.y == b.y && a.z == b.z && a.typ > b.typ);   }   bool cmp2(node a, node b) { return a.y <= b.y; }   void cdq(int l, int r) {     if (l == r) return;     int mid = (l + r) >> 1;     cdq(l, mid);     cdq(mid + 1, r);     int pa = l, push_back = mid + 1, ct = 0;     while (pa <= mid && push_back <= r) {       if (cmp2(q[pa], q[push_back])) {         if (q[pa].typ == 1) T.add(q[pa].z, 1);         tmp[++ct] = q[pa++];       } else {         if (q[push_back].typ == 0) ans[q[push_back].id] += T.ask(q[push_back].z);         tmp[++ct] = q[push_back++];       }     }     while (pa <= mid) {       if (q[pa].typ == 1) T.add(q[pa].z, 1);       tmp[++ct] = q[pa++];     }     while (push_back <= r) {       if (q[push_back].typ == 0) ans[q[push_back].id] += T.ask(q[push_back].z);       tmp[++ct] = q[push_back++];     }     for (int i = l; i <= mid; ++i) {       if (q[i].typ == 1) T.add(q[i].z, -1);     }     for (int i = 1; i <= ct; ++i) q[l + i - 1] = tmp[i];   }   int main() {     ios::sync_with_stdio(0);     cin.tie(0);     n = read();     m = read();     T.N = n + m;     for (int i = 1; i <= n; ++i) p[i] = read();     for (int i = 1; i <= n; ++i) s[i] = read();     for (int i = 1; i <= n; ++i) b[i] = read();     for (int i = 1; i <= m; ++i) inc[i] = read();     for (int i = 1; i <= m; ++i) pref[i] = read();     for (int i = 1; i <= n; ++i) p1[i] = b[i] + p[i];     for (int i = 1; i <= m; ++i) p2[i] = inc[i] + pref[i];     lisanhua(p1, p2, p3);     for (int i = 1; i <= n + m; ++i) q[i].x = p3[i];     for (int i = 1; i <= n; ++i) p1[i] = p[i] - b[i];     for (int i = 1; i <= m; ++i) p2[i] = inc[i] - pref[i];     lisanhua(p1, p2, p3);     for (int i = 1; i <= n + m; ++i) q[i].y = p3[i];     for (int i = 1; i <= n; ++i) p1[i] = -s[i];     for (int i = 1; i <= m; ++i) p2[i] = -inc[i];     lisanhua(p1, p2, p3);     for (int i = 1; i <= n + m; ++i) q[i].z = p3[i];     for (int i = 1; i <= n; ++i) q[i].typ = 1, q[i].id = i;     for (int i = 1; i <= m; ++i) q[i + n].id = i;     sort(q + 1, q + n + m + 1, cmp1);     cdq(1, n + m);     for (int i = 1; i <= m; ++i) cout << ans[i] <<    ;     cout << endl;     return 0;   }