var
  f,d:array[0..1000]of longint;
  v:array[1..1000]of boolean;
  i,j,k,n,m,e,x,y,t,p,w:longint;
  c:array[1..100,0..100]of longint;
  a:array[1..100,1..100]of longint;
 
function dji(x,y:longint):longint;
var i,j,k,min:longint;
begin
  fillchar(d,sizeof(d),$7f);
  fillchar(v,sizeof(v),0);
  d[1]:=0;
  for i:=x to y do
    for j:=1 to c[i,0] do
      v[c[i,j]]:=true;
  for i:=1 to m do
  begin
    min:=10000000;k:=0;
    for j:=1 to m do
      if not v[j] and(d[j]<min) then begin min:=d[j];k:=j;end;
    if (k=0)or(k=m) then break;
    v[k]:=true;
    for j:=1 to m do
      if not v[j] and(d[j]>a[k,j]+d[k]) then d[j]:=a[k,j]+d[k];
  end;
  exit(d[m]);
end;
begin
  readln(n,m,k,e);
  fillchar(a,sizeof(a),$7f);
  for i:=1 to e do
  begin
    read(x,y);
    readln(a[x,y]);
    a[y,x]:=a[x,y];
  end;
  readln(t);
  for i:=1 to t do
  begin
    readln(p,x,y);
    for j:=x to y do
    begin
      inc(c[j,0]);
      c[j,c[j,0]]:=p;
    end;
  end;
  for i:=1 to n do
  begin
    f[i]:=maxlongint;
    for j:=1 to i do
    begin
      w:=dji(j,i);
      if w>10000000 then continue;
      if f[i]>k+f[j-1]+w*(i-j+1) then f[i]:=k+f[j-1]+w*(i-j+1);
    end;
  end;
  writeln(f[n]-k)
end.