Several issues:
First of all, you've defined std as a 30-element array of 40-element arrays of char; IOW, you can store at most 30 strings of at most 39 characters (plus 0 terminator), not 120 strings.
Secondly, to read into each of these strings, the call to scanf would simply be
for (x = 0; x < 30; x++)
scanf("%s", std[x]);
The type of the expression std[x] is char [40], or 40-element array of char. However, there is a rule that when expressions of type "N-element of T" are encountered, they are implicitly converted ("decay") to type "pointer to T" (the exceptions to this rule are when the array expression is an operand of the sizeof or unary & operators, or if the array expression is a string literal being used to initialize another array in a declaration); thus, in this context, the type of the expression std[x] decays to type char *, or pointer to char, so you don't need to use the & operator explicitly.
The risk of using scanf like this is that it's possible for the user to type in more characters than the target buffer can hold; if the user types 100 characters, those extra 60 characters will be stored in the memory immediately past the end of the buffer, which may or may not cause problems later on. You can get around this two ways: first, you can add a field width specifier to the %s conversion specification, like so:
scanf("%39s", std[x]);
second, you can avoid using scanf completely and use fgets instead:
fgets(std[x], sizeof std[x], stdin);
x=owas in the original question. I assume it was a "copy/paste error" :-)