#include <cstdio>
#include <cstring>
#define MIN(A,B) ((A)<=(B)?(A):(B))
#define MAX(A,B) ((A)>=(B)?(A):(B))
int X,Y,Z,V[4],E[51],A[51];
double dp[51][5001];
int main() {
	while(scanf("%d %d %d",&X,&Y,&Z),X) {
		for(int i=0;i<X;i++) {
			scanf("%d",&V[i]);
		}
		memset(E,0,sizeof(E));
		memset(A,0,sizeof(A));
		for(int i=0;i<Z;i++) {
			int n;
			scanf("%d",&n);
			scanf("%d %d",&E[n],&A[n]);
		}
		memset(dp,0,sizeof(dp));
		dp[0][0]=1;
		for(int i=0;i<Y;i++) {
			for(int j=0;j<=5000;j++) {
				for(int k=0;k<X;k++) {
					int next=MIN(Y,i+V[k]),money=j;
					if(E[next]==2) money+=A[next];
					if(E[next]==3) money=MAX(0,money-A[next]);
					if(E[next]==1) next=MIN(Y,next+A[next]);
					dp[next][money]+=dp[i][j]/X;
				}
			}
		}
		double sum=0;
		for(int i=0;i<=5000;i++) {
			sum+=i*dp[Y][i];
		}
		printf("%d\n",(int)sum);
	}
}