#include <bits/stdc++.h>   using namespace std;   clock_t __stt;   inline void TStart() { __stt = clock(); }   inline void TReport() {     cerr << fixed << setprecision(3) <<   nCurrent Case Taken Time :            << (double)(clock() - __stt) / CLOCKS_PER_SEC <<  sec n ;   }   template <typename T>   T MIN(T a, T b) {     return a < b ? a : b;   }   template <typename T>   T MAX(T a, T b) {     return a > b ? a : b;   }   template <typename T>   T ABS(T a) {     return a > 0 ? a : (-a);   }   template <typename T>   void UMIN(T &a, T b) {     if (b < a) a = b;   }   template <typename T>   void UMAX(T &a, T b) {     if (b > a) a = b;   }   int n, m, p[100005], s[100005], b[100005], inc[100005], pref[100005];   struct ele {     int A, B, C, id;     void set(int _A, int _B, int _C, int _id) {       A = _A;       B = _B;       C = _C;       id = _id;     }   } es[100005], et[100005];   struct qry {     int Al, Ar, B, C;     void set(int _Al, int _Ar, int _B, int _C) {       Al = _Al;       Ar = _Ar;       B = _B;       C = _C;     }   } qs[100005], qt[100005];   namespace BIT {   int arr[300005];   void add(int p, int v = 1) {     ++p;     while (p <= 300002) {       arr[p] += v;       p += (p & (-p));     }   }   void clr(int p) {     ++p;     while (p <= 300002) {       arr[p] = 0;       p += (p & (-p));     }   }   int sum(int p) {     int r = 0;     ++p;     while (p) {       r += arr[p];       p -= (p & (-p));     }     return r;   }   }  // namespace BIT   bool cmpB(ele a, ele b) { return a.B < b.B; }   bool cmpC(ele a, ele b) { return a.C < b.C; }   bool cmpBq(qry a, qry b) { return a.B < b.B; }   bool cmpCq(qry a, qry b) { return a.C < b.C; }   vector<int> vs;   int id(int v) { return lower_bound(vs.begin(), vs.end(), v) - vs.begin(); }   int res[100005];   void solve2d(ele *E, int ec, qry *Q, int qc) {     int i, j, k;     sort(E, E + ec, cmpB);     sort(Q, Q + qc, cmpBq);     reverse(Q, Q + qc);     reverse(E, E + ec);     j = 0;     for (i = 0; i < ec; ++i) {       int cB = E[i].B;       while (j < qc && Q[j].B >= cB) {         BIT::add(Q[j].Al, 1);         BIT::add(Q[j].Ar + 1, -1);         ++j;       }       res[E[i].id] += BIT::sum(E[i].A);     }     for (i = 0; i < qc; ++i) {       BIT::clr(Q[i].Al);       BIT::clr(Q[i].Ar + 1);     }   }   void solve(int cl, int cr, int ql, int qr, int el, int er) {     if (ql > qr || el > er) return;     int i, j, k;     if (cl == cr) {       solve2d(es + el, er - el + 1, qs + ql, qr - ql + 1);       return;     }     memcpy(et + el, es + el, sizeof(ele) * (er - el + 1));     memcpy(qt + ql, qs + ql, sizeof(qry) * (qr - ql + 1));     int cM = ((long long)cl + (long long)cr) / 2ll, qM, eM;     for (qM = ql; qM <= qr; ++qM) {       if (qt[qM].C <= cM && (qM == qr || qt[qM + 1].C > cM)) break;     }     if (qt[ql].C > cM) qM = ql - 1;     for (eM = el; eM <= er; ++eM) {       if (et[eM].C <= cM && (eM == er || et[eM + 1].C > cM)) break;     }     if (et[el].C > cM) eM = el - 1;     if (er > eM && qM >= ql) solve2d(et + eM + 1, er - eM, qt + ql, qM - ql + 1);     solve(cl, cM, ql, qM, el, eM);     solve(cM + 1, cr, qM + 1, qr, eM + 1, er);   }   int main() {     int i, j, k;     scanf( %d%d , &n, &m);     for (i = 0; i < n; ++i) scanf( %d , p + i);     for (i = 0; i < n; ++i) scanf( %d , s + i);     for (i = 0; i < n; ++i) scanf( %d , b + i);     for (i = 0; i < m; ++i) scanf( %d , inc + i);     for (i = 0; i < m; ++i) scanf( %d , pref + i);     for (i = 0; i < n; ++i) {       qs[i].Al = p[i];       qs[i].Ar = s[i];       vs.push_back(p[i]);       vs.push_back(s[i]);       qs[i].B = b[i] - p[i];       qs[i].C = b[i] + p[i];     }     for (j = 0; j < m; ++j) {       es[j].A = inc[j];       vs.push_back(inc[j]);       es[j].B = pref[j] - inc[j];       es[j].C = pref[j] + inc[j];       es[j].id = j;     }     sort(vs.begin(), vs.end());     vs.erase(unique(vs.begin(), vs.end()), vs.end());     for (i = 0; i < n; ++i) {       qs[i].Al = id(qs[i].Al);       qs[i].Ar = id(qs[i].Ar);     }     for (j = 0; j < m; ++j) {       es[j].A = id(es[j].A);     }     sort(es, es + m, cmpC);     sort(qs, qs + n, cmpCq);     solve(0, (int)2e9 + 5, 0, n - 1, 0, m - 1);     for (i = 0; i < m; ++i) {       printf( %d  , res[i]);     }     return 0;   }