#include typedef long long LL; const int N = 3e5 + 7; struct dat { int l, r, p; }; dat q[N], *fr, *ba; int n, a[N], x[N], y[N]; LL f[N]; LL tri(LL x) { return x * x * x; } LL F(int i, int j) { return f[j] + tri(std::abs(a[i] - x[j + 1])) + tri(y[j + 1]); } int main() { scanf("%d", &n); for(int i = 1; i <= n; ++i) scanf("%d", &a[i]); for(int i = 1; i <= n; ++i) scanf("%d", &x[i]); for(int i = 1; i <= n; ++i) scanf("%d", &y[i]); *(fr = ba = q + 1) = {1, n, 0}; for(int i = 1; i <= n; ++i) { f[i] = F(i, fr->p); if(++fr->l > fr->r) ++fr; while(fr <= ba && F(ba->l, i) <= F(ba->l, ba->p)) --ba; if(fr > ba) *++ba = {i + 1, n, i}; else if(F(ba->r, i) <= F(ba->r, ba->p)) { int l = ba->l, r = ba->r; while(l + 1 < r) { int mid = l + r >> 1; if(F(mid, i) <= F(mid, ba->p)) r = mid; else l = mid; } ba->r = r - 1; *++ba = {r, n, i}; } else if(ba->r != n) { ba[1] = {ba->r + 1, n, i}; ++ba; } } printf("%lld\n", f[n]); return 0; }