word is a pointer to an array of chars, which will point to your first input "My" on the first iteration. This means that:
word = "My";
input[0] = word;
input[0] = "My"; //as word and input[0] now point to the same memory location
You're then modifying the value stored at the location in memory pointed to by word:
input[0] = word;
word = "name";
input[1] = word;
word, as a pointer has not changed, only the value it points to has changed. On your second iteration:
input[0] = word = "name"; //as the memory location of word doesn't change
input[1] = word = "name"; //any pointer set to word will point to the same char array
Your third iteration does the exact same thing, causing your output to be "is is is".
First, you should define word with its own size/memory:
char word[64] = NULL; //arbitrary size that's bigger than your largest length word
For this example you can use:
char input[5][64] = { NULL };
But I would suggest using dynamically allocated memory for input later on.
And it's up to you how you copy the contents of word to your input array, but possibilities include using strcpy:
int i = 0;
while (scanf("%s", word) != EOF){
strcpy(input[i], (const char*)word);
i++;
}