import java.io.*;
import java.util.*;

public class last_mb {
    private static void floyd(int[][] d) {
        int n = d.length;
        for (int k = 0; k < n; ++k) {
            for (int i = 0; i < n; ++i) {
                for (int j = 0; j < n; ++j) {
                    d[i][j] = Math.min(d[i][j], d[i][k] + d[k][j]);
                }
            }
        }
    }

    public static void main(String[] args) throws IOException {
        Input in = new Input();
        int r = in.nextInt();
        int[] t = new int[r];
        for (int i = 0; i < r; ++i) {
            t[i] = in.nextInt();
        }
        int k = in.nextInt();
        int[] c = new int[k];
        for (int i = 0; i < k; ++i) {
            c[i] = in.nextInt();
        }
        int[][] d = new int[k][k];
        int INF = 86401;
        for (int[] dd : d) {
            Arrays.fill(dd, INF);
        }
        for (int i = 0; i < k; ++i) {
            d[i][i] = 0;
        }
        int m = in.nextInt();
        for (int i = 0; i < m; ++i) {
            int a = in.nextInt() - 1;
            int b = in.nextInt() - 1;
            d[b][a] = d[a][b] = Math.min(d[a][b], in.nextInt());
        }
        floyd(d);

        int[] curr = new int[k];
        int[] next = new int[k];
        Arrays.fill(curr, 1, k, INF);

        int answer = 0;
        for (int pint = 0; pint < r; ++pint) {
            Arrays.fill(next, INF);
            for (int pubFrom = 0; pubFrom < k; ++pubFrom) {
                if (curr[pubFrom] < INF) {
                    int[] dFrom = d[pubFrom];
                    for (int pubTo = 0; pubTo < k; ++pubTo) {
                        if (pubTo == pubFrom && pint > 0) continue;
                        int canDo = curr[pubFrom] + dFrom[pubTo] + t[pint];
                        if (canDo <= c[pubTo]) {
                            answer = pint + 1;
                            next[pubTo] = Math.min(next[pubTo], canDo);
                        }
                    }
                }
            }
            int[] tmp = curr;
            curr = next;
            next = tmp;
        }
        System.out.println(answer);
    }

    private static class Input {
        byte[] buf = new byte[2048];
        int curr, size;

        char next() throws IOException {
            if (curr == size) {
                curr = 0;
                size = System.in.read(buf);
            }
            char rv = (char) buf[curr];
            ++curr;
            return rv;
        }

        int nextInt() throws IOException {
            char ch;
            while ((ch = next()) <= ' ');
            int rv = ch - '0';
            while ((ch = next()) > ' ') {
                rv = 10 * rv + (ch - '0');
            }
            return rv;
        }
    }
}
