You certainly have the right idea. Although, you could simplify it...
if you use "Set at X" instead of "Set at XY" you could leave out the extra ",0" at the end of every line that sets or accesses the array.
You could also easily eliminate the global variables by just putting the random() statement down at the bottom where you set the citizen instance variables. Make sure you put the Floor() outside of the Random() call: you want "Set FirstName to FirstName.At(Floor(Random(FirstName.Width)))"
Also the last section where you assign the names to citizens will run every tick - constantly reassigning names unless you put that in an "On start of layout" block or in a function...
One other thing to be aware of, FirstName.Width will be the number of spaces defined in your array, not how many you have used. Your code shows you have set up 3 names, but if your array has room for 10 names, then your code would try to assign names that don't exist sometimes.