/* Author: Peter Schaeffer */
#include <stdio.h>
#include <stdlib.h>

struct Road{
	int destination;
	int length;
	struct Road *next;
};

FILE *in;
int i, ha, ra, ta, h[101], ht[101], fix, t[10001], day;
struct Road r[200000];
struct Road* first[10001];
int *rp[100000], rr[100000][3];

int cmp(const void *a, const void *b)
{
	if ((*((int**)a))[2]<(*((int**)b))[2]) return 1;
	if ((*((int**)a))[2]>(*((int**)b))[2]) return -1;
	return 0;
}

void jump(int s, int tim, int rest)
{
	t[s]=tim;
	struct Road *p=first[s];
	while (p)
	{
		if ((tim+p->length<t[p->destination]) && (rest-p->length>=0))
		{
			fix=0;
			jump(p->destination, tim+p->length, rest-p->length);
		}
		p=p->next;
	}
}

int main()
{
	in=stdin;//fopen("hotel.in", "r");
	while(1)
	{
		fscanf(in, " %d", &ta);
		if (!ta) break;
		fscanf(in, " %d", &ha);
		h[0]=1; ht[0]=0;
		for(i=1; i<=ha; i++)
		{
			fscanf(in, " %d", h+i);
			ht[i]=1000000000;
		}
		fscanf(in, " %d", &ra);
		for(i=0; i<ra; i++)
		{
			rp[i]=&rr[i][0];
			fscanf(in, " %d %d %d", &rr[i][0], &rr[i][1], &rr[i][2]);
		}
		qsort(rp, ra, sizeof(int*), cmp);
		for(i=1; i<=ta; i++) first[i]=NULL;
		for(i=0; i<ra; i++)
		{
			int d1=rp[i][0], d2=rp[i][1], d3=rp[i][2];
			r[2*i].destination=d2;
			r[2*i].length=d3;
			r[2*i].next=first[d1];
			first[d1]=r+(2*i);
			r[2*i+1].destination=d1;
			r[2*i+1].length=d3;
			r[2*i+1].next=first[d2];
			first[d2]=r+(2*i+1);
		}
		t[1]=0;	fix=0; day=0;
		while(!fix)
		{
			fix=1;
			for(i=1; i<=ta; i++) t[i]=1000000000;
			for(i=0; i<=ha; i++)
				if ((ht[i]<=day) && (ht[i]>day-600))
					jump(h[i], ((ht[i]+599)/600)*600, 600);
			if (t[ta]<1000000000) break;
			for(i=0; i<=ha; i++)
				if (t[h[i]]<ht[i])
					ht[i]=t[h[i]];
			day+=600;
		}
		if (t[ta]<1000000000)
			printf("%d\n", (t[ta]-1)/600);
		else
			printf("-1\n");
	}
	return 0;
}
