import heapq n, m, k, t = map(int,input().split()) modoru = [[(-1,-1) for j in range(m)] for i in range(n)] for i in range(k): a, b, c, d = map(int,input().split()) a -= 1 b -= 1 modoru[a][b] = (c, d) tmax = 401 d = [10 ** 18] * n * m * tmax d[200] = 0 pq = [(d[200], 200)] r1 = m * tmax while pq: tmp, nowv = heapq.heappop(pq) fnv = nowv nowt = nowv % tmax nowv //= tmax b = nowv % m a = nowv // m if tmp > d[fnv]: continue for xx, yy in [(-1, 0), (1, 0), (0, 1), (0, -1)]: x = a + xx y = b + yy if 0 <= x < n and 0 <= y < m: dist = tmp targ = x*r1 + y*tmax + min(nowt+1, tmax-1) if dist < d[targ]: d[targ] = dist heapq.heappush(pq, (dist, targ)) if modoru[a][b][0] == -1: continue c, dd = modoru[a][b] dist = tmp + dd targ = a*r1 + b*tmax + max(0, nowt-c+1) if dist < d[targ]: d[targ] = dist heapq.heappush(pq, (dist, targ)) ans = 10 ** 18 for ts in range(tmax): if ts - 200 > t: continue ans = min(ans, d[(n-1)*r1 + (m-1)*tmax + ts]) if ans == 10 ** 18: print(-1) else: print(ans)