I’ll preface this by saying that I know nothing about OSC.
The three messages idea seems bad – is there any guarantee that the messages will arrive in the same order as they were dispatched (does your code handle this possibility?).
Could you pack the index, x and y into a single (32 bit?) integer so as to deal with everything in one message? If the index, x and y ranges can’t be represented as fields that fit into an integer frame then format the message as a BLOB and deliver all of the data in one block.