What's wrong with this program?
var i,j,m,n,s,k,p : longint;
A : array [1..100,1..100] of integer;
B : array [1..100,1..100] of longint;
C : array [1..100] of boolean;
procedure Work(q,w : integer);
var ii : integer;
Begin
if C[w] then m := 1;
if C[w] then Exit;
C[w] := true;
for ii := 1 to n do if (A[w,ii] > 0) and (ii <> q) then Work(w,ii);
End;
BEGIN
Read(n,m,s);
for i := 1 to n do for j := 1 to n do A[i,j] := 0;
for i := 1 to m do
begin
Read(j,k,p);
if (j = k) or (A[j,k] > 0) then
begin
for j := i+1 to m do Read(j,k,p);
Write('YES');
Exit;
end;
A[j,k] := p;
A[k,j] := p;
end;
for i := 1 to n do C[i] := false;
m := 0;
Work(0,1);
if m = 1 then
begin
Write('YES');
Exit;
end;
for i := 1 to n do for j := 1 to n do if A[i,j] = 0 then B[i,j] :=
10000000
else B[i,j] :=
A[i,j];
for i := 1 to n do B[i,i] := 0;
for m := 1 to n do for i := 1 to n do for j := 1 to n do if B[i,j]
> B[i,m] + B[m,j] then B[i,j] := B[i,m] + B[m,j];
m := 0;
for i := 1 to n do for j := 1 to n do if (B[i,j] >= s) and (B[i,j]
< 10000000) then m := 1;
if m = 0 then Write('NO')
else Write('YES');
END.